首页 > 解决方案 > 如何修复在 django 中创建超级用户的错误?

问题描述

好的,我通过从 AbstractBaseUser 继承创建了自定义 Auth 模型。当我创建简单用户时,一切正常,但随后我尝试创建超级用户出现问题。

这是我的用户和用户管理器:

class PatientUserManager(BaseUserManager):
    def create_user(self, snils, name=None, surname=None, telephone=None, password=None, is_superuser=None):
        '''Создание пользователя со снилсом, именем, фамилией и паролем'''

        if not snils:
            raise ValueError('Отсутствует Номер СНИЛС')


        user = self.model(snils, name, surname, telephone)      


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

        return user

    def create_superuser(self, snils, name, surname, telephone, password):
        user=self.create_user(snils, name, surname, telephone)

        user.is_superuser = True
        user.is_admin = True
        user.is_staff = True


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

        return user



class PatientUser(AbstractBaseUser, PermissionsMixin):
    snils = models.CharField('СНИЛС', max_length= 14, unique=True)
    email = models.EmailField('email', max_length= 255, blank=True)
    name = models.CharField('Имя', max_length= 50, blank=True)
    surname = models.CharField('Фамилия', max_length= 80, blank=True)

    patronimic = models.CharField('Отчество', max_length= 80, blank=True)

    date_joined = models.DateTimeField('Дата Регистрации', auto_now_add=True)
    telephone = models.CharField('Номер телефона', max_length= 18, blank=True)

    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)

    USERNAME_FIELD = 'snils'
    EMAIL_FIELD = 'email'

    REQUIRED_FIELDS = ['name', 'surname', 'telephone']

    objects = PatientUserManager()

    def get_full_name(self):
        '''
        Возвращает first_name и last_name с пробелом между ними.
        '''
        full_name = '%s %s' % (self.name, self.surname)
        return full_name.strip()

    def get_short_name(self):
        '''
        Возвращает сокращенное имя пользователя.
        '''
        return self.name

当我尝试 创建超级用户时,我收到错误:

ValueError: invalid literal for int() with base 10: '555-555-555 55'

但是如果在“СНИЛС”字段中输入整数而不是“555-555-555 55”,他就会开始抱怨姓氏:

СНИЛС: 47
Имя: Vladimir
Фамилия: Suddenok
Номер телефона: 8800
Password: 
Password (again): 

...
["'Suddenok' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."].

好吧,我表现出毅力并继续解决问题。改姓:

СНИЛС: 47
Имя: Vladimir
Фамилия: 2018-08-14 12:47
Номер телефона: 8800
Password: 
Password (again): 

...
django.core.exceptions.ValidationError: ["'8800' value must be either True or False."]

更改电话:

СНИЛС: 47
Имя: Vladimir
Фамилия: 2018-08-14 12:47
Номер телефона: True
Password: 
Password (again): 

...
Traceback (most recent call last):
File "/home/maumba/ProjectPython/VE/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
psycopg2.IntegrityError: null value in column "date_joined" violates not-      null constraint
DETAIL:  Failing row contains (47, !t0cnBjuTplCtE8vJRGsIgsLN5U0pTDXzg22rWFEF, 2018-08-14 12:47:00+00, t, , , , , , null, , t, f, f).

感谢您的关注

标签: python-3.6django-2.0

解决方案


推荐阅读