我正在使用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_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)
"""
...