Django rest框架总是插入,从不更新

2024-09-23 00:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想能够更新一个用户记录的邮政。但是,id始终为空。即使我通过了身份证似乎也被忽略了

视图代码:

JSON发布:

{
    "id": 1, 
    "name": "Craig Champion", 
    "profession": "Developer", 
    "email": "craig@isai.co.uk"
}

@api_view(['POST'])
def get_purchase(request):
    """
    Gets purchase records for a user

    Purchase collection is returned
    """

    user = User();
    serializer = UserSerializer(user, data=request.DATA)

    if serializer.is_valid():

       #The object ALWAYS has ID = nothing at this point

        serializer.save()

        return Response(serializer.data, status=status.HTTP_200_OK)

    else:
        return Response(serializer.errors,   status=status.HTTP_400_BAD_REQUEST)

模型序列化程序

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('id', 'name', 'profession', 'email', 'password', )
        write_only_fields = ('password' , )

模型

class User(models.Model):
    name = models.CharField(max_length=30, null=True, blank=True)
    profession = models.CharField(max_length=100, null=True, blank=True)
    email = models.EmailField()
    password = models.CharField(max_length=20, null=True, blank=True)


    def __unicode__(self):
        return self.name

如何强制savechanges更新并查看ID?


Tags: nameidtruereturnmodelsemailstatuspassword
1条回答
网友
1楼 · 发布于 2024-09-23 00:22:53

您需要使用partial=True更新包含部分数据的行:

serializer = UserSerializer(user, data=request.DATA, partial=True)

来自docs

By default, serializers must be passed values for all required fields or they will throw validation errors. You can use the partial argument in order to allow partial updates.

相关问题 更多 >