Django регистрация пользователя с телефоном и паролем - PullRequest
0 голосов
/ 07 мая 2020

Я создаю пользовательскую модель пользователя в django с использованием абстрактного базового класса пользователя, я хочу создать пользователя только с двумя полями «телефон и пароль», а имя является необязательным полем, которое я установил в своих моделях .py, которые blank = true. Я создал rest api для регистрации пользователя с использованием моей пользовательской модели пользователя, но каждый раз, когда я пытаюсь создать нового пользователя с телефоном и паролем, он дает мне ошибку ниже: -

IntegrityError at /api/users/
UNIQUE constraint failed: accounts_user.name
Request Method: POST
Request URL:    http://127.0.0.1:8000/api/users/
Django Version: 3.0.1
Exception Type: IntegrityError
Exception Value:    
UNIQUE constraint failed: accounts_user.name
Exception Location: /usr/local/lib/python3.7/site-packages/django/db/backends/sqlite3/base.py in execute, line 396
Python Executable:  /usr/local/opt/python/bin/python3.7
Python Version: 3.7.6
Python Path:    
['/Users/raghav/milkbasketdemo/milkbasketdemo',
 '/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',
 '/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
 '/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',
 '/usr/local/lib/python3.7/site-packages']

Пожалуйста, помогите где Я ошибаюсь, я искал и пытался изменить код несколько раз, но у меня ничего не работает.

пожалуйста, найдите приведенный ниже код models.py

 class UserManager(BaseUserManager):

 def create_user(self,phone, password=None,is_staff=False,is_admin=False,is_active=True):

    if phone is None:
        raise TypeError('Users must have a phonenumber.')



    user = self.model(phone=phone)
    user.set_password(password)
    user.staff=is_staff
    user.admin=is_admin
    user.active=is_active
    user.save(using=self._db)

    return user

def create_staffuser(self, phone, password):
    """
    Creates and saves a staff user with the given email and password.
    """
    user = self.create_user(
        phone,
        password=password,
        is_staff=True
    )
#    user.staff = True
    user.save(using=self._db)
    return users

def create_superuser(self, phone, password):
    """
    Creates and saves a superuser with the given email and password.
    """
    user = self.create_user(
        phone=phone,
        password=password,
        is_staff=True,
        is_admin=True
    )
    #user.staff = True
    #user.admin = True
    #user.active=True
    user.save(using=self._db)
    return user

class User(AbstractBaseUser,PermissionsMixin):
phone_regex=RegexValidator(regex = r'^[6-9]\d{9}$',message='please enter the correct phonenumber')

#name_regex=RegexValidator(regex=r'/^[A-Za-z]+$/',message='Please enter the correct name')
phone=models.CharField(validators=[phone_regex],max_length=15,unique=True)
name=models.CharField(max_length=15,unique=True,blank=True)
date_joined=models.DateTimeField(verbose_name='date joined',auto_now_add=True)
last_login=models.DateTimeField(verbose_name='last login',auto_now=True)
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False) # a admin user; non super-user
admin = models.BooleanField(default=False)
first_login=models.BooleanField(default=False)

USERNAME_FIELD='phone'
REQUIRED_FIELDS = []


objects = UserManager()

def __str__(self):

    return self.phone


@property
def token(self):

    return self._generate_jwt_token()

def get_full_name(self):

    return self.name

def has_perm(self, perm, obj=None):

    return True

def has_module_perms(self, app_label):

    return True

ниже это код serializer.py

class RegistrationSerializer(serializers.ModelSerializer):



password = serializers.CharField(
    max_length=128,
    min_length=8,
    write_only=True
)


token = serializers.CharField(max_length=255, read_only=True)

class Meta:

    fields = ['phone', 'password']

def create(self, validated_data):

    return User.objects.create_user(**validated_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...