新Urls模式和具有相同名称的多个变量

时间:2017-12-07 13:53:38

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

我使用的是Django 2.0类型的网址,我的网址中包含多个变量,名称相同。我还使用ClassBasedView

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

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

如果我使用其他名称,CBV将不知道要搜索的内容。

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

1 个答案:

答案 0 :(得分: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,如上所示。