我试图理解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']
您可以将其添加到您的
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 并迁移你的模型。