UNIQUE 约束失败:customuser.username

问题描述 投票:0回答:1

我试图理解drf。 我已经设置了所有端点并且它们可以工作,唯一不起作用的是当我想将某些内容发布到我的数据库时,第一个帖子进展顺利,然后第二个帖子显示完整性错误,我现在被困了几天哈哈 有人可以帮助我理解我在这里缺少什么吗

模型.py:

class CustomUser(AbstractUser):
    name = models.CharField(max_length=30)
    email  = models.EmailField(default ="no email")
    first_name = models.CharField(max_length = 25 ,default = 'No name')
    last_name = models.CharField(max_length = 25, default = 'No surname')
    password = models.CharField(max_length = 25,default = "no password")
    
    
    
    def __str__(self):
        return self.name

views.py

class CustomModelViewSet(ModelViewSet):
    serializer_class = UserSerializer
    queryset = CustomUser.objects.all()
    

@api_view(['GET', 'POST'])
def user_list(request,format =None):
    #get all users
    #serialize them
    #return json
    if request.method == 'GET':
        allUser = CustomUser.objects.all()
        serializer = UserSerializer(allUser, many=True)
        return Response(serializer.data)
    
    elif request.method =='POST':
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

@api_view(['GET','PUT','DELETE'])       
def user_detail(request,id,format =None):
    try:
        user = CustomUser.objects.get(pk=id)
    except CustomUser.DoesNotExist:
        return Response(status.HTTP_404_NOT_FOUND)
    if request.method == 'GET':
        serializer = UserSerializer(user)
        return Response(serializer.data)
    elif request.method == 'PUT':
        serializer = UserSerializer(user, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    elif request.method == 'DELETE':
        user.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

序列化器.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = CustomUser
        fields = ['id','email','password','first_name','last_name']
python django django-rest-framework
1个回答
0
投票

您可以将其添加到您的

models.py

中的以下两行中
  class CustomUser(AbstractUser):
        name = models.CharField(max_length=30)
        email  = models.EmailField(default ="no email")
        first_name = models.CharField(max_length = 25 ,default = 'No name')
        last_name = models.CharField(max_length = 25, default = 'No surname')
        password = models.CharField(max_length = 25,default = "no password")
        
        USERNAME_FIELD = 'username'
        REQUIRED_FIELDS = ("email",)
        
        def __str__(self):
            return self.name

然后进行 Makemigrations 并迁移你的模型。

© www.soinside.com 2019 - 2024. All rights reserved.