rag*_*.sp 3 django django-serializer django-rest-framework
我刚开始使用 Django 并且陷入了一些我认为应该很简单的事情,但我不知道该怎么做。
我有一个这样的模型:
id = models.AutoField(primary_key=true)
...
amount = models.IntegerField()
...
Run Code Online (Sandbox Code Playgroud)
基本上,用户会给出一个金额,并且模型需要使用当前金额 + 用户输入的金额进行更新。
我使用序列化程序来创建新对象,但我真的不知道如何使用它们来做到这一点。
让我们假设以下情况:
MyModelMyModelSerializerAmountPartialUpdateView 正在延伸 APIView您的部分更新 url 是这样定义的 - 也就是说,模型 id 在pkURL 变量中传递,要添加的数量在amountURL 变量中传递:
urlpatterns = patterns('',
# ...
url(r'^model/update-partial/(?P<pk>\d+)/(?P<amount>\d+)$', AmountPartialUpdateView.as_view(), name='amount_partial_update'),
# ...
)
Run Code Online (Sandbox Code Playgroud)然后,您应该在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)
Run Code Online (Sandbox Code Playgroud)
这样,访问 URL
model/update-partial/123/5
Run Code Online (Sandbox Code Playgroud)
您将amount模型 id 123的数量增加5 个单位。
| 归档时间: |
|
| 查看次数: |
8051 次 |
| 最近记录: |