【问题标题】:Accessing Primary Key from URL in Django View Class从 Django 视图类中的 URL 访问主键
【发布时间】:2012-11-23 11:07:56
【问题描述】:

我有一个 URL 模式映射到我的 Django 应用程序中的自定义视图类,如下所示:

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

问题是,我无法弄清楚如何从视图类中的 URL 模式字符串访问“pk”,以便可以根据其数据库 ID 检索特定模型对象。 google了一下,翻阅了Django文档,搜索了Stack Overflow,完全找不到满意的答案。

谁能告诉我?

【问题讨论】:

  • @Ankur Gupta 感谢您的链接,但我仍然不完全清楚。它是 self.kwargs 的一部分吗?我以为我掌握了 Django 的窍门,直到我进入基于类的视图。我只是完全不理解他们。
  • @luke 基于类的视图只是一种抽象,我觉得它很烦人并坚持使用功能。我不认为他们有多大帮助。没必要你需要使用它。对 URL 使用简单的函数也可以正常工作。

标签: python django url-routing


【解决方案1】:

在基于类的视图中,URL 中的所有元素都放入self.args(如果它们是非命名组)或self.kwargs(对于命名组)。因此,对于您的观点,您可以使用self.kwargs['pk']

【讨论】:

  • 我已经整理好了。我什至对 Django View 类的工作方式也有了更好的理解。谢谢!
【解决方案2】:

访问视图中的主键 发布 =

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

【讨论】:

    【解决方案3】:

    这是一个基于 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())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 2023-03-23
      • 2021-12-03
      • 2012-10-19
      相关资源
      最近更新 更多