我有一个定义如下的ModelViewSet:
class PurchaseOrderApproverViewSet(viewsets.ModelViewSet):
queryset = PurchaseOrderApprover.objects.all()
@list_route(methods=['POST'])
def approve_purchase_order(self, request):
purchase_order = request.data['purchase_order']
approver = request.data['approver']
purchase_order_approver =
PurchaseOrderApprover.objects.filter(approver=approver,
purchase_order=purchase_order).first()
if purchase_order_approver:
serializer = PurchaseOrderApproverSerializer()
serializer.approve(purchase_order_approver)
content = {'success'}
return Response(content, status=status.HTTP_200_OK)
else:
raise Http404
相应的ModelSerializer是:
^{pr2}$假设request.data
将包含一个json负载:{"purchase_order": 1, "approver": 1}
,根据这两个属性,我可以找到相应的采购订单审批人,然后,我想通过PurchaseOrderApproverSerializer
中定义的方法is_approved
更新为{
模型定义如下:
^{3}$因为序列化程序只能接收已在序列化程序中定义的数据,因此,我必须先通过视图集中的筛选器找到对象,然后启动序列化程序调用序列化程序中定义的函数来更新对象。但我很肯定DRF提供了一种更好(或更简单)的方法。在
我正在寻找一些东西,如自定义的viewset方法或重写序列化程序中的update方法来实现此目的。在
也许,在序列化程序方法
approve()
内,您可以使用序列化程序的上下文,然后就可以访问请求。基于此,您应该得到request.data
。在在序列化程序方法内部:
相关问题 更多 >
编程相关推荐