Django Rest Framework - 业务操作特定视图?

Django Rest Framework - business action specific views?

我有一个使用模型序列化程序的基于模型的基本视图:

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 但带有附加数据的操作项的模型视图(我想我可以通过视图的序列化程序添加它)

PUT /actionitems/5/assign 并触发将使用 PUT 数据更新模型数据并根据传递给它的操作键 ('assign') 对其进行额外更改的视图?

我能否以某种方式扩展 ModelViewSet,以便它可以 return 不同的序列化器并执行不同的操作,同时 PUT/POST 等基于 /actionitems/5/ 之后的参数?或者我应该在这里使用不同的方法。

Django REST 框架允许您通过 @detail_route 装饰器将 "actions" 添加到 ViewSet。您可以阅读有关装饰器的更多信息 in the documentation for ViewSets and it requires the use of the built-in routers.

为了支持多种请求方法(PUT/POST),您将需要通过 methods 参数将它们传递给装饰器。所以你会使用

@detail_route(methods=['post', 'put'])

然后您可以根据正在使用的方法进行路由,方法是检查传入的 request 上的 request.method