django-rest-framework:在相同的URL中使用独立的GET和PUT,但使用不同的泛型视图

问题描述 投票:12回答:1

我正在使用django-rest-framework,我需要在URL文件中映射两个具有相同url的通用视图(我已经使用了URL,但没有使用Routes:]

我只需要在一个网址中允许GET,PUT和DELETE动词(如/ api / places / 222),并允许每个人获取具有相关实体位置的每个字段,但只允许使用相同的实体来更新(PUT)一个字段网址。

放置实体:

- id (not required in PUT)
- name (required always)
- date (not required in PUT but required in POST)

URL

url(r'^api/places/(?P<pk>\d+)/?$', PlacesDetail.as_view(), name='places-detail'),

我尝试使用RetrieveDestroyAPIView和UpdateAPIView,但是我无法仅使用一个URL。

get django-rest-framework put
1个回答
17
投票

我建议您创建一些满足您需要的序列化器。然后重写视图的get_serializer方法,以便该视图根据HTTP请求方法切换序列化程序。

这是一个未经测试的快速示例:

class PlacesDetail(RetrieveUpdateDestroyAPIView):

    def get_serializer_class(self):
        if self.request.method == 'POST':
            serializer_class = FirstSerializer
        elif self.request.method == 'PUT':
            serializer_class = SecondSerializer

        return serializer_class
    ...

查看基类方法的注释:

def get_serializer_class(self):
    """
    Return the class to use for the serializer.
    Defaults to using `self.serializer_class`.

    You may want to override this if you need to provide different
    serializations depending on the incoming request.

    (Eg. admins get full serialization, others get basic serialization)
    """
    ...
© www.soinside.com 2019 - 2024. All rights reserved.