Django Rest Framework - 业务行动的具体观点?

时间:2015-03-21 03:25:45

标签: rest django-views django-rest-framework

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

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 /后面的参数执行不同的操作吗?或者我应该在这里使用不同的方法。

1 个答案:

答案 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,根据正在使用的方法进行路由。