更新django rest框架中的字段
我有一个名为Customer的类:更新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__'
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'})),