Расширение Django Auth с Django Norel

Я хочу продлить свое творение в django в django mongodb . Создал класс, который расширяет пользовательскую модель, также добавил AUTH_USER_MODEL = "users.XYZUser" в мои settings.py.... вот мой models.py

class XYZUserManager(BaseUserManager):

    def create_user(self, email,role_id, password=None, **extra_fields):
        """
        Creates and saves a User with the given username, email and password.
        """
        now = timezone.now()
        if not email:
          raise ValueError('The given username must be set')
          email = XYZUserManager.normalize_email(email)
        user = self.model(email=email,
                      is_staff=False, is_active=True, is_superuser=False,
                      last_login=now, date_joined=now,role_id=role_id,emailId=email, **extra_fields)

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, role_id,password, **extra_fields):
       u = self.create_user(email,role_id, password, **extra_fields)
       u.is_staff = True
       u.is_active = True
       u.is_superuser = True
       u.save(using=self._db)
       return u


class XYZUser(User):
    #id=models.AutoField(primary_key=True)
    role_id=models.IntegerField(choices=ROLES,default=2)
    emailId=models.EmailField(unique=True)

    #is_active =models.BooleanField()
    #is_staff=models.BooleanField()
    #date_joined = models.DateTimeField()
    #is_superuser = models.BooleanField()
    #last_login = models.DateTimeField()


    REQUIRED_FIELDS = ['role_id', 'emailId']
    USERNAME_FIELD = 'emailId'

    objects = UserManager()

когда я запускаю /manage.py syncdb, я получаю следующую ошибку

CommandError: Одна или несколько моделей не прошли валидацию:mission_backend_nonrel.userpermissionlist: "пользователь" определяет отношение с моделью "auth.User", которое было заменено. Обновите отношение, чтобы оно указывало на настройки.AUTH_USER_MODEL.

Любая идея, что я пропускаю. Я планирую использовать электронную почту в качестве поля для входа вместо имени пользователя вместе с некоторыми дополнительными полями.

Я использую разрешение Norel для аутентификации

AUTHENTICATION_BACKENDS = (

'permission_backend_nonrel.backends.NonrelPermissionBackend',
)



INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'djangotoolbox',
    'users',
    'permission_backend_nonrel',

)

1 ответ

Попробуйте наследовать класс XYZUser от AbstractUser или AbstractBaseUser.

Другие вопросы по тегам