Django rest更新一个字段

Django rest update one field

我刚开始使用 Django,却卡在了一些我认为应该很简单的事情上,但我不知道该怎么做。

我有这样一个模型:

id = models.AutoField(primary_key=true)
...
amount = models.IntegerField()
...

基本上,用户会给出一个金额,模型需要更新为当前金额+用户输入的金额。

我使用序列化程序创建新对象,但我真的不知道如何使用它们来执行此操作。

让我们假设如下:

  1. 你的模型叫做MyModel
  2. 你的序列化器 class 被命名为 MyModelSerializer
  3. AmountPartialUpdateView 正在扩展 APIView
  4. 你的部分更新url是这样定义的——也就是说,model id是 在 pk URL 变量中传递,要添加的数量在 amount URL 变量中传递:

    urlpatterns = patterns('',
        # ...
        url(r'^model/update-partial/(?P<pk>\d+)/(?P<amount>\d+)$', AmountPartialUpdateView.as_view(), name='amount_partial_update'),
        # ...
    )
    

然后,您应该在 AmountPartialUpdateView.patch() 方法中实现正确的更新逻辑。实现此目的的一种方法是:

from django.shortcuts import get_object_or_404
from rest_framework import Response


class AmountPartialUpdateView(APIView):

    def patch(self, request, pk, amount):
        # if no model exists by this PK, raise a 404 error
        model = get_object_or_404(MyModel, pk=pk)
        # this is the only field we want to update
        data = {"amount": model.amount + int(amount)}
        serializer = MyModelSerializer(model, data=data, partial=True)

        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        # return a meaningful error response
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

这样,访问 URL

model/update-partial/123/5

您将模型 ID 123amount 增加 5 个单位。

只需使用 partial=True 作为您的序列化程序参数之一,并为您要更新的文件创建一个对象,即我想更新队列状态

    data = {'queue_status': 1}
serializer_patient_queue = PatientQueueSaveSerializer(queue_item, data=data, partial=True)