我有一个基于模型的基本视图,它使用模型序列化器:
class ActionItemTextSerializer(serializers.ModelSerializer):
assignee_name = serializers.CharField(source='get_assignee_name')
class Meta:
model = ActionItem
fields = ('id', 'created_by', 'created_date', 'project', 'portfolio', 'name', 'description', 'parent', 'priority', 'status', 'assignee', 'assignee_name', 'wf_get_actions')
#depth = 1
class ActionItemViewSet(viewsets.ModelViewSet):
queryset = ActionItem.objects.all()
serializer_class = ActionItemTextSerializer
所以,当我转到/actionitems/
时,我会得到一份清单,当我转到/actionitems/5/
时,我会获得有关个别行动项目的详细信息。
我的操作项可以有与之关联的特定操作 - 如何扩展所有这些以获得以下内容:
GET /actionitems/5/assign
并获取id = 5但有其他数据的操作项的模型视图(我可以通过视图' s序列化程序添加此视图)
PUT /actionitems/5/assign
并触发一个视图,该视图将使用PUT数据更新模型数据,并根据传递给它的操作键(' assign')对其进行其他更改?
我可以以某种方式扩展ModelViewSet,以便它可以返回不同的序列化程序并在PUT / POST等基于/ actionitems / 5 /后面的参数执行不同的操作吗?或者我应该在这里使用不同的方法。
答案 0 :(得分:0)
Django REST框架允许您通过@detail_route
装饰器向ViewSet添加“操作”。您可以阅读有关装饰器in the documentation for ViewSets的更多信息,并且需要使用built-in routers。
为了支持多种请求方法(PUT
/ POST
),您需要通过methods
参数将它们传递给装饰器。所以你会使用
@detail_route(methods=['post', 'put'])
然后,您可以通过检查传入的request.method
上的request
,根据正在使用的方法进行路由。