django.db.utils.IntegrityError:唯一约束失败:authentication_user.email

问题描述

我正在尝试通过API创建用户,但是我对上述错误感到震惊。

下面是用户及其管理者的代码在这里,我正在创建自定义用户模型。

class UserManager(BaseUserManager):

    def create_user(self,username,email,password=None):

        if username is None:
            raise TypeError('Users should have a Username')
        if email is None:
            raise TypeError('Users should have a Email')

        user = self.model(username=username,email=self.normalize_email)
        user.set_password(password)
        user.save()
        return user


    def create_superuser(self,password=None):

        if password is None:
            raise TypeError('Password should not be none')
        
        user = self.create_user(username,password)
        user.save()
        return user

class User(AbstractBaseUser,PermissionsMixin):
    username = models.CharField(max_length=255,unique=True,db_index=True)
    email = models.EmailField(max_length=255,db_index=True)

    USERNAME_FIELD = 'email'
    required_FIELDS = ['username']

    objects= UserManager()

    def __str__(self):
        return self.email

下面是serializers.py文件

class RegisterSerializers(serializers.ModelSerializer):
    password = serializers.CharField(max_length=68,min_length=6,write_only=True)

    class Meta:
        model = User
        fields = ['email','username','password']

    def validate(self,attrs):
        email = attrs.get('email','')
        username = attrs.get('username','')

        if not username.isalnum():
            raise serializers.ValidationError('The username should only contain alphanumeric character')
        return attrs
        
    def create(self,validated_data):
        return User.objects.create_user(**validated_data)

这是views.py中的POST请求

class RegisterView(generics.GenericAPIView):

    serializer_class = RegisterSerializers

    def post(self,request):
        user = request.data
        serializer = self.serializer_class(data=user)
        serializer.is_valid(raise_exception=True)
        serializer.save()

        user_data = serializer.data

        return Response(user_data,status=status.HTTP_201_CREATED)

我是drf的新手。请帮助我,谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)