【问题标题】:New Urls patterns and multiple variables with the same name新的 Urls 模式和同名的多个变量
【发布时间】:2018-05-21 15:41:17
【问题描述】:

我使用的是 Django 2.0 类型的 url,并且我的 url 中有多个变量,名称相同。我也在使用 ClassBasedView

path('/companies/<int:pk>/products/<int:pk>/', AccountCompanyProductDetailView.as_view()

我使用 pk 是因为它是主键,CBV 会知道如何使用它(其他 Model 字段类似)。

如果我使用其他名称,CBV 将不知道要搜索什么。

在 CBV 中,我如何获取参数并知道哪个是哪个。 ? Django 如何知道每个位置我需要哪个模型的 pk ?

【问题讨论】:

  • 我不这么认为....我认为对不同的变量使用不同的名称会更好
  • 您是否在问如何访问您的 CBV 中的参数?我会将它们重命名为 &lt;int:myparam1&gt;&lt;int:myparam2&gt; 并在我的班级中访问它们。
  • 但如果我不使用 pk(主键)或 slug,如果不是我需要的字段名称,CBV 将如何搜索。

标签: django django-urls django-class-based-views


【解决方案1】:

Django 不知道如何处理这个问题。您需要重命名参数并在CBV 中访问它们。 这可能如下所示:

urls.py:

path('/companies/<int:pk1>/products/<int:pk2>/', AccountCompanyProductDetailView.as_view())

views.py:

class AccountCompanyProductDetailView(DetailView):
    model = Product

    def get_object(self):
        pk1 = self.kwargs['pk1']
        pk2 = self.kwargs['pk2']
        company = get_object_or_404(Company, pk=pk1)
        product = get_object_or_404(Product, pk=pk2)
        return product

您也需要在其他视图中执行此操作。覆盖相应的方法,如get_queryset。如上所示访问kwargs

【讨论】:

  • 该代码可能应该在get_queryset 或`get_objectz 中,否则是的。
猜你喜欢
  • 1970-01-01
  • 2013-09-06
  • 2013-04-02
  • 2012-01-15
  • 2015-11-16
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
相关资源
最近更新 更多