2015-07-03 7 views
3

Джанго 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 совершенно новый класс авт)

Так что я делать не так?

+0

Вам действительно нужно наследовать от 'AbstractUser', а не' AbstractBaseUser'? –

+0

Да, это быстрее. Я не изменяю аутентификацию, просто добавляя поля к модели пользователя. Мне не нравится «профиль», потому что мне нужно интегрироваться с пакетом djoser. – DmitrySemenov

+0

Ну, вы должны определенно раскомментировать строку в settings.py, которая сообщает Django использовать пользовательский пользователь, вот что вызывает огромную ошибку. Давайте поговорим о другом ... Проблема в том, что у вас есть две конкретные модели, основанные на одной и той же абстрактной модели, и внешний ключ или многие из многих полей сталкиваются в их 'related_name'. –

ответ

1

решение

  1. был удалить, повторно создать дБ
  2. Remove * .pyc файлы
  3. Удалить Миграции папки

затем питон manage.py makemigrations работал отлично ,

+0

У меня была такая же проблема. Я просто думал, что это будет решение. Рад, что это сработало для вас, теперь я тоже попытаюсь это сделать. –

Смежные вопросы