我使用的是Django 2.0类型的网址,我的网址中包含多个变量,名称相同。我还使用ClassBasedView
path('/companies/<int:pk>/products/<int:pk>/', AccountCompanyProductDetailView.as_view()
我使用pk是因为它是主键,CBV将知道如何使用它(类似于其他模型字段)。
如果我使用其他名称,CBV将不知道要搜索的内容。
在CBV中如何获取参数并知道哪个参数。 ? Django如何知道每个模型中我需要的模型?
答案 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
,如上所示。