在Django视图类中从URL访问主键

cmssoen2  于 2023-04-07  发布在  Go
关注(0)|答案(4)|浏览(110)

我有一个URL模式Map到我的Django App中的一个自定义视图类,如下所示:

url( r'^run/(?P<pk>\d+)/$', views.PerfRunView.as_view( ))

问题是,我不知道如何从视图类中的URL模式字符串访问'pk',以便根据其数据库ID检索特定的模型对象。我已经谷歌过,查看过Django文档,搜索过Stack Overflow,我根本找不到满意的答案。
有人能告诉我吗?

von4xj4u

von4xj4u1#

在基于类的视图中,URL中的所有元素都被放置到self.args(如果它们是未命名的组)或self.kwargs(对于命名的组)中。

ej83mcc0

ej83mcc02#

访问视图中的主键post =

Class_name.objects.get(pk=self.kwargs.get('pk'))
voj3qocg

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())
q35jwt9p

q35jwt9p4#

正如许多人所说,self.kwargs工作得很好。它特别有助于self.get_queryset()的功能,不像listcreate,其中pk工作得更好。

相关问题