Джанго 1.8.2Расширение Джанго модель пользователя и ошибки
это моя модель:
class AppUser(AbstractUser):
_SEX = (
('M', 'Male'),
('F', 'Female'),
)
_pregex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
phone = models.CharField(validators=[_pregex], max_length=16, blank=True)
gender = models.CharField(max_length=1, blank=True, choices=_SEX)
birthday = models.DateField(blank=True)
vericode = models.CharField(max_length=40, blank=True) # verification code over SMS?
verified = models.DateTimeField(null=True) # datetime stored when verification happened
@property
def age(self):
today = date.today()
return today.year - self.birthday.year - ((today.month, today.day) < (self.birthday.month, self.birthday.day))
это мои настройки:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# register externals
EXTERNAL_LIBS_PATH = os.path.join(BASE_DIR, "_externals", "libs")
EXTERNAL_APPS_PATH = os.path.join(BASE_DIR, "_externals", "apps")
APPS_PATH = os.path.join(BASE_DIR, "apps")
sys.path = ["", EXTERNAL_APPS_PATH, EXTERNAL_LIBS_PATH, APPS_PATH] + sys.path
# TEST PATH
TEST_ASSETS = os.path.join(BASE_DIR, "_test")
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = (
'suit',
'django.contrib.auth',
'django.contrib.admin',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.postgres',
'cacheops',
'rest_framework',
'rest_framework.authtoken',
'corsheaders',
'djoser',
'consents'
)
# Custom model for Auth
# AUTH_USER_MODEL = 'consents.AppUser'
моя структура папок это
app
-settings.py etc
apps
-consents
В settings.py я Добавленные приложения путь: APPS_PATH = os.path.join (base_dir, "приложения") для sys.path,
при запуске питона manage.py SyncDB (или что-нибудь еще), я получаю это:
(cmr) F:\_Projects\cmr\containers\backend>python manage.py syncdb
F:\_Projects\cmr\.venv\cmr\lib\importlib\_bootstrap.py:321: RemovedInDjango19Warning: django.contrib.contenttypes.generic is deprecated and will be removed in Django 1.9. Its contents have been moved to the fields, forms, and admin submodules of django.contrib.contenttypes.
return f(*args, **kwds)
SystemCheckError: System check identified some issues:
ERRORS:
auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'AppUser.groups'.
HINT: Add or change a related_name argument to the definition for 'User.groups' or 'AppUser.groups'.
auth.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'AppUser.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'AppUser.user_permissions'.
consents.AppUser.groups: (fields.E304) Reverse accessor for 'AppUser.groups' clashes with reverse accessor for 'User.groups'.
HINT: Add or change a related_name argument to the definition for 'AppUser.groups' or 'User.groups'.
consents.AppUser.user_permissions: (fields.E304) Reverse accessor for 'AppUser.user_permissions' clashes with reverse accessor for 'User.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'AppUser.user_permissions' or 'User.user_permissions'.
Если я раскомментировать эту строку в настройках
# AUTH_USER_MODEL = 'consents.AppUser'
я получаю другую ошибку:
ValueError: Dependency on unknown app: consents
мне просто нужно добавить несколько полей по умолчанию модели User (не хочу создать новый subclassign AbstractBaseUser совершенно новый класс авт)
Так что я делать не так?
Вам действительно нужно наследовать от 'AbstractUser', а не' AbstractBaseUser'? –
Да, это быстрее. Я не изменяю аутентификацию, просто добавляя поля к модели пользователя. Мне не нравится «профиль», потому что мне нужно интегрироваться с пакетом djoser. – DmitrySemenov
Ну, вы должны определенно раскомментировать строку в settings.py, которая сообщает Django использовать пользовательский пользователь, вот что вызывает огромную ошибку. Давайте поговорим о другом ... Проблема в том, что у вас есть две конкретные модели, основанные на одной и той же абстрактной модели, и внешний ключ или многие из многих полей сталкиваются в их 'related_name'. –