Django rest更新一个字段
Django rest update one field
我刚开始使用 Django,却卡在了一些我认为应该很简单的事情上,但我不知道该怎么做。
我有这样一个模型:
id = models.AutoField(primary_key=true)
...
amount = models.IntegerField()
...
基本上,用户会给出一个金额,模型需要更新为当前金额+用户输入的金额。
我使用序列化程序创建新对象,但我真的不知道如何使用它们来执行此操作。
让我们假设如下:
- 你的模型叫做
MyModel
- 你的序列化器 class 被命名为
MyModelSerializer
AmountPartialUpdateView
正在扩展 APIView
你的部分更新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 123 的 amount
增加 5 个单位。
只需使用 partial=True 作为您的序列化程序参数之一,并为您要更新的文件创建一个对象,即我想更新队列状态
data = {'queue_status': 1}
serializer_patient_queue = PatientQueueSaveSerializer(queue_item, data=data, partial=True)
我刚开始使用 Django,却卡在了一些我认为应该很简单的事情上,但我不知道该怎么做。
我有这样一个模型:
id = models.AutoField(primary_key=true)
...
amount = models.IntegerField()
...
基本上,用户会给出一个金额,模型需要更新为当前金额+用户输入的金额。
我使用序列化程序创建新对象,但我真的不知道如何使用它们来执行此操作。
让我们假设如下:
- 你的模型叫做
MyModel
- 你的序列化器 class 被命名为
MyModelSerializer
AmountPartialUpdateView
正在扩展APIView
你的部分更新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 123 的 amount
增加 5 个单位。
只需使用 partial=True 作为您的序列化程序参数之一,并为您要更新的文件创建一个对象,即我想更新队列状态
data = {'queue_status': 1}
serializer_patient_queue = PatientQueueSaveSerializer(queue_item, data=data, partial=True)