Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新django rest框架中的字段_Django_Django Rest Framework_Django Serializer - Fatal编程技术网

更新django rest框架中的字段

更新django rest框架中的字段,django,django-rest-framework,django-serializer,Django,Django Rest Framework,Django Serializer,我有一个名为Customer的类: class Customer(models.Model): name = models.CharField(max_length=250) status = models.IntegerField() 序列化程序是: class CustomerSerializer(serializers.ModelSerilizer): class Meta: model = Customer fields = '__all__'

我有一个名为Customer的类:

class Customer(models.Model):
   name   = models.CharField(max_length=250)
   status = models.IntegerField()
序列化程序是:

class CustomerSerializer(serializers.ModelSerilizer):
    class Meta:
    model = Customer
    fields = '__all__'
现在,我如何使用POST方法仅更改/更新状态字段。我在这里使用的是函数基视图。 我希望收到如下价值:

{
     "status": 1
}

为什么您希望user post方法更新数据,因为您正在更新,所以您可以使用用户修补程序



class CustomerUpdateSerializer(serializers.ModelSerializer):
   class Meta:
       model = Customer
       fields = ('status',)


from rest_framework.decorators import api_view
from rest_framework import response

@api_view(methods=['post', "patch"])
def api_function(request, *args, **kwargs):
   change instance logic according to u
   instance  = Customer.objects.get()
   if request.method == "POST":
     # post is used for create data so i did for that for update use path
     serializer = CustomerSerializer(data=request.data)
   else:
      serializer = CustomerUpdateSerializer(instance=instance, data=request.data)
   if serializer.is_valid(raise_exceptions=True):
      serializer.save()
  return response.Response(serializer.data)


如果您使用的是基于类的视图,这将更加容易。您可以轻松创建一个更新
UpdateStatusView
retrieveUpdateAppiview
发送一个
patch
请求

但是,由于您使用的是基于函数的视图,我仍然建议您使用
补丁
请求,而不是
发布
请求,这样可以提供更好的自我文档

def update_status_request(request, id):
    if request.method == 'PATCH':
        customer = Customer.objects.get(pk=id)
        customer.status = request.data.get('new_status')
        customer.save()
        return JsonResponse({'message': 'Status has been updated'}, status=200)

您可能还想做一些额外的验证并尝试…除了。

您可以为此使用viewset

查看

from rest_framework import viewset

class CustomerViewSet(viewset.ModelViewSet):
    serializer_class = CustomerSerializer
path('customer/update/<int:pk>', CustomerViewSet.as_view({'post': 'update'})),
Url

from rest_framework import viewset

class CustomerViewSet(viewset.ModelViewSet):
    serializer_class = CustomerSerializer
path('customer/update/<int:pk>', CustomerViewSet.as_view({'post': 'update'})),
path('customer/update/',CustomerViewSet.as_视图({'post':'update'})),