How fix bug with superuser creation in django?

112 views Asked by At

ok, I've created custom Auth model, by inhereting from AbstractBaseUser. When i create simple user, everything is Ok, but then i try to create superuser something goes wrong.

here is my User and UserManager:

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

when i try to create superuser, i receive error:

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

but if enter integer number in 'СНИЛС' field instead of '555-555-555 55', he starts to complain about surname:

СНИЛС: 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."].

well, i showed perseverance and continued to solve problems as they come. changed Surname:

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

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

changed Telephone:

СНИЛС: 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).

thanks for your attention

0

There are 0 answers