我刚刚开始使用Django并且遇到了一些我认为应该简单的事情,但我不知道该怎么做。
我有一个像这样的模型:
id = models.AutoField(primary_key=true)
...
amount = models.IntegerField()
...
基本上,用户将提供金额,模型需要使用当前金额+用户输入的金额进行更新。
我使用序列化程序来创建新对象,但我真的不知道如何使用它们来执行此操作。
答案 0 :(得分:2)
我们假设以下内容:
MyModel
MyModelSerializer
AmountPartialUpdateView
正在扩展APIView
您的部分更新网址定义如下 - 即模型ID为
传入pk
网址变量,并在amount
网址变量中传递要添加的金额:
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)
这样,访问网址
model/update-partial/123/5
您将以 5 为单位增加模型ID 123 的amount
。
答案 1 :(得分:0)
只需将partial = True用作序列化程序参数之一,并为要更新的文件字段创建对象,即我要更新队列状态
data = {'queue_status': 1}
serializer_patient_queue = PatientQueueSaveSerializer(queue_item, data=data, partial=True)