新的 Urls 模式和同名的多个变量
New Urls patterns and multiple variables with the same name
我使用的是 Django 2.0 类型的 url,并且我的 url 中包含多个同名变量。我也在使用 ClassBasedView
path('/companies/<int:pk>/products/<int:pk>/', AccountCompanyProductDetailView.as_view()
我使用 pk 是因为它是主键,CBV 知道如何使用它(与其他模型字段类似)。
如果我使用其他名称,CBV 将不知道要搜索什么。
在 CBV 中,我如何获取参数并知道哪个是哪个。 ?
Django 如何知道我在每个位置需要哪个模型的 pk?
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
。
我使用的是 Django 2.0 类型的 url,并且我的 url 中包含多个同名变量。我也在使用 ClassBasedView
path('/companies/<int:pk>/products/<int:pk>/', AccountCompanyProductDetailView.as_view()
我使用 pk 是因为它是主键,CBV 知道如何使用它(与其他模型字段类似)。
如果我使用其他名称,CBV 将不知道要搜索什么。
在 CBV 中,我如何获取参数并知道哪个是哪个。 ? Django 如何知道我在每个位置需要哪个模型的 pk?
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
。