我有一个URL模式Map到我的Django App中的一个自定义视图类,如下所示:
url( r'^run/(?P<pk>\d+)/$', views.PerfRunView.as_view( ))
问题是,我不知道如何从视图类中的URL模式字符串访问'pk',以便根据其数据库ID检索特定的模型对象。我已经谷歌过,查看过Django文档,搜索过Stack Overflow,我根本找不到满意的答案。有人能告诉我吗?
von4xj4u1#
在基于类的视图中,URL中的所有元素都被放置到self.args(如果它们是未命名的组)或self.kwargs(对于命名的组)中。
self.args
self.kwargs
ej83mcc02#
访问视图中的主键post =
Class_name.objects.get(pk=self.kwargs.get('pk'))
voj3qocg3#
这是一个基于django restframework的例子,使用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())
q35jwt9p4#
正如许多人所说,self.kwargs工作得很好。它特别有助于self.get_queryset()的功能,不像list,create,其中pk工作得更好。
self.get_queryset()
list
create
pk
4条答案
按热度按时间von4xj4u1#
在基于类的视图中,URL中的所有元素都被放置到
self.args
(如果它们是未命名的组)或self.kwargs
(对于命名的组)中。ej83mcc02#
访问视图中的主键post =
voj3qocg3#
这是一个基于django restframework的例子,使用url中的pk来检索对象:
views.py
urls.py
q35jwt9p4#
正如许多人所说,
self.kwargs
工作得很好。它特别有助于self.get_queryset()
的功能,不像list
,create
,其中pk
工作得更好。