не удалось обновить существующие данные с помощью платформы Django Rest?

#django-rest-framework #django-serializer

Вопрос:

Я новичок в платформе Django rest и пытаюсь обновить существующие данные в базе данных. Но вместо обновления в базу данных добавляются новые данные.

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() либо создаст новый экземпляр, либо обновит существующий экземпляр, в зависимости от того, был ли передан существующий экземпляр при создании экземпляра класса сериализатора.

Ответ №1:

 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()
 

Для ВВОДА в эксплуатацию отправьте полные обновленные данные Заказчика

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

Комментарии:

1. это работает, но за исключением того, что ему нужно изменить Response() на HttpResponse (), в остальном это показывает мне Exception Value: .accepted_renderer not set on Response