我在Django应用程序中将URL模式映射到自定义视图类,如下所示:
url( r'^run/(?P<pk>\d+)/$', views.PerfRunView.as_view( ))
问题是,我无法弄清如何从URL模式字符串中访问'pk'以便在视图类中检索基于其数据库ID的特定模型对象。我已经搜索过谷歌、查看了Django文档、在Stack Overflow上进行了搜索,但都没有找到令人满意的答案。有人可以告诉我吗?
我在Django应用程序中将URL模式映射到自定义视图类,如下所示:
url( r'^run/(?P<pk>\d+)/$', views.PerfRunView.as_view( ))
问题是,我无法弄清如何从URL模式字符串中访问'pk'以便在视图类中检索基于其数据库ID的特定模型对象。我已经搜索过谷歌、查看了Django文档、在Stack Overflow上进行了搜索,但都没有找到令人满意的答案。self.args
(如果它们是非命名组)或 self.kwargs
(对于命名组)中。因此,在您的视图中,您可以使用 self.kwargs ['pk']
。要在视图中访问主键,使用
post.pk
Class_name.objects.get(pk=self.kwargs.get('pk'))
这是一个基于Django Rest Framework的示例,用于通过URL中的pk检索对象:
views.py
class ContactListView(generics.ListAPIView):
queryset = Profile.objects.all()
serializer_class = UserContactListSerializer
def get(self, request, pk, *args, **kwargs):
contacts = Profile.objects.get(pk=pk)
serializer = UserContactListSerializer(contacts)
return Response(serializer.data)
urls.py
url(r'^contact_list/(?P<pk>\d+)/$', ContactListView.as_view())
正如许多人所说,self.kwargs
运行良好。
它特别有助于 self.get_queryset()
函数,不像 list
、create
那样,pk
更好。