【发布时间】:2018-06-28 03:11:52
【问题描述】:
我已成功使用 filter_fields 返回单个过滤结果列表。
我想更新这个结果。
有没有办法更新过滤后的单个结果?通过如下 URL 模式?
LocalHost:8080/PriceMaster/?ISIN=aaa&valuedate=2018-01-01
我知道如果我在 URL 末尾使用主键而不是过滤器,我可以更新实例。
我觉得我可能需要使用新的 url 创建第二个视图(继承自其中一个 API 视图)?
RetrieveUpdateAPIView、RetrieveDestroyAPIView、RetrieveUpdateDestroyAPIView
有没有办法将它保存在 1 ViewSet 中,它会是什么样子?
这是我目前的 views.py
class PriceMasterViewSet(ModelViewSet):
queryset = PriceMaster.objects.filter(vflag=1)
lookup_field = 'django_id'
filter_backends = (DjangoFilterBackend,)
filter_fields = ('ISIN', 'ValueDate',)
model = PriceMaster
当我在 Postman 中对 URL 进行 PUT、PATCH 或 POST 时,我收到错误“方法不允许”
谢谢
编辑 1
正如预期的那样,当我添加第二个视图集(继承 RetrieveUpdateDestroyAPIView)和一个新 URL 时,我可以检索过滤后的实例并进行更改。
附加视图
class PriceMasterEditSet(RetrieveUpdateDestroyAPIView):
def get_object(self):
queryset = PriceMaster.objects.filter(vflag=1)
if 'ISIN' in self.request.query_params and 'valuedate' in self.request.query_params:
filter_kwargs = {'ISIN': self.request.query_params['ISIN'],
'valuedate': self.request.query_params['valuedate']}
else:
raise Http404('Missing required parameters')
obj = get_object_or_404(queryset, **filter_kwargs)
self.check_object_permissions(self.request, obj)
return obj
添加到模式的附加 URL
url(r'^PriceMaster/edit', PriceMasterEditSet.as_view())
我仍然想问我可以在 1 ViewSet 内执行此操作吗?
【问题讨论】:
标签: python django django-rest-framework django-filter