Django Rest Framework,带有一个用于DetailAPIView的slug或pk查找字段

时间:2017-10-20 10:26:16

标签: python django django-rest-framework

我有一个关于Django Rest Framework的帖子的api列表。知道我强调我的帖子标题,每当用户为她的帖子提供标题时,我想用slug对象捕获pk(DRF中的默认查找字段)的post api细节如果帖子有标题,则提供或使用slug字段。

在我的后期应用程序的api文件夹中,我编写了以下views.py:

$users = $wpdb->get_results( "SELECT SUM(wp_wpdatatable_1.payback) as sumed FROM wp_wpdatatable_1", ARRAY_A);

并提供相应的urls.py:

class PostDetailAPIView(generics.RetrieveAPIView):
   queryset = Post.objects.all()
   serializer_class = serializers.PostDetailSerializer
   try:
      lookup_field = 'slug'
   except:
      lookup_field = 'pk'

当帖子具有slugified(标题)查找时,此方法非常有效。但是没有slug的帖子的帖子详细信息视图显示以下内容:

urlpatterns = [
   url(r'^$', PostListAPIView.as_view(), name='list-api'),
   url(r'^(?P<slug>[\w-]+)/$', PostDetailAPIView.as_view(), 
       name='detail-api'),
   url(r'^(?P<pk>\d+)/$', PostDetailAPIView.as_view(), name='detail-
       api'),
]

有关如何显示pk或slug字段查找的post api详细信息的任何建议?最好在urls.py中没有代码重复。

2 个答案:

答案 0 :(得分:1)

首先:您的urls.py适用于第一个匹配的网址。所以它找不到你的第二个网址。

第二:在我看来,你应该坚持使用&#34; pk&#34;版本(这是REST声明的)或查找的slug版本。所以一般来说,我会期待寻找pk或slug的过程。

我知道这还没有解决你100%的答案,但它应该让你忽略了发生了什么以及REST端点可能是什么样子。

答案 1 :(得分:0)

对于单个视图使用两个不同的参数对我来说似乎是一个不好的做法,我建议你使用其中一个,在你的视图中,你做一个try / catch,因为pk将是整数类型,title将是字符串类型,您可以检查url参数的类型,然后执行您的逻辑