【问题标题】:Django Rest Framework - business action specific views?Django Rest Framework - 业务操作特定视图?
【发布时间】:2015-03-22 23:03:40
【问题描述】:

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

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,以便它可以根据 /actionitems/5/ 之后的参数返回不同的序列化程序并在 PUT/POST 等时执行不同的操作?或者我应该在这里使用不同的方法。

【问题讨论】:

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


    【解决方案1】:

    Django REST 框架允许您通过 @detail_route 装饰器向 ViewSet 添加“操作”。您可以阅读有关装饰器 in the documentation for ViewSets 的更多信息,它需要使用 built-in routers

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-19
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 2021-05-31
      • 2018-10-18
      相关资源
      最近更新 更多