无法使用 Django Rest Framework 更新现有数据?

unable to update existing data using Django Rest Framework?

我是 Django 休息框架的新手,想要更新数据库中的现有数据。 但是代替更新的是将新数据添加到数据库中。

serializers.py

class CustomersSerializer(serializers.Serializer):
    lname = serializers.CharField(max_length=10)
    fname = serializers.CharField(max_length=10)

    def create(self, validated_data):
        return Customers.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.fname = validated_data.get('fname', instance.fname)
        instance.lname = validated_data.get('lname', instance.lname)
        instance.save()
        return instance

view.py

def UpdateData(request):  # Not Working
    user = Customers.objects.get(id=1)
    serialize = CustomersSerializer(user)
    json_data = JSONRenderer().render(serialize.data)
    stream = io.BytesIO(json_data)
    data = JSONParser().parse(stream)
    serializer = CustomersSerializer(data=data)
    if serializer.is_valid():
        temp_dict = serializer.validated_data
        temp_dict['fname'] = "abcd"
        serializer.save()
    return HttpResponse("Updated..")

如果我的整个过程是错误的,请给我一些好的资源来理解序列化程序和 django rest 框架。

我学到的是 调用 .save() 将创建一个新实例,或更新现有实例,具体取决于在实例化序列化程序时是否传递了现有实例 class .

def UpdateData(request):  # Not Working
    ##payload send in request(fields with value which are changed) in request.data 
    request_data = request.data 
    payload = {
    'fname' : 'test',
    'lname' : 'user'  
    }
    user = Customers.objects.get(id=1)
    serialize = CustomersSerializer(user,payload,partial=True)

    ##specify renderers/decoders settings in settings.py/config.py
  
    if serializer.is_valid():
        ##don't know why you need this.
        temp_dict = serializer.validated_data
        temp_dict['fname'] = "abcd"
        ###
        serializer.save()
        return HttpResponse("Updated..")
    return HttpResponse('error in update {}'.format(serializer.errors))
    

查看序列化程序的变化,首先检索要更新的对象,即用户,然后是包含要更新的字段和值的字典,partial=True 指定部分更新。

为了保存新对象,直接在序列化程序中传递有效负载,然后是 .save()

serializer = CustomersSerializer(data=payload)
if serializer.is_valid():
    serializer.save()

对于 PUT 操作,发送客户的完整更新数据

customer = Customer.objects.get(id=1) 
serializer = CustomersSerializer(customer,data=payload)
    if serializer.is_valid():
        serializer.save()