使用Django打开另一个listView的外键



我正在Django中做一个产品概述页面。为此,我有三个模型:类别、品牌、产品。我已经创建了一个类别的ListView视图。我通过循环来显示它们。然后,我想打开该类别下所有品牌的另一个概述。我该怎么做呢?

这些是我的模型:

class Category(models.Model):
category_name = models.CharField(max_length=200)
sub_category = models.CharField(max_length=200,blank=True,null=True)
category_picture = models.ImageField(upload_to='category/', null=True, blank=True)

def __str__(self):
if self.sub_category is None:
return self.category_name
else:
return f" {self.category_name} {self.sub_category}"

class Meta:
ordering = ['category_name']

class Brand(models.Model):
category = models.ForeignKey('Category', on_delete=models.SET_NULL,null=True,blank=True)
brand_name = models.CharField(max_length=200)
brand_owner = models.CharField(max_length=200)
brand_story = models.TextField()
brand_country = models.CharField(max_length=200)

def __str__(self):
return f"{self.brand_name}"


class Bottle(models.Model):
category_name = models.ForeignKey('Category', on_delete=models.SET_NULL,null=True,blank=True)
brand = models.ForeignKey('Brand', on_delete=models.CASCADE)
bottle_name = models.CharField(max_length=255)
bottle_info = models.TextField()
bottle_tasting_notes = models.TextField()
bottle_barcode = models.IntegerField()
bottle_image = models.ImageField(upload_to='bottles/',null=True)
def __str__(self):
return f"{self.brand.brand_name} {self.bottle_name}"

如何从类别列表视图的链接打开某个类别内所有品牌的列表视图?

首先创建另一个listview,显示特定类别中的所有品牌。为此,我们创建了一个新的get_queryset()方法。

views.py

class BrandListView(ListView):
model = Brand
def get_queryset(self):
return Brand.objects.filter(category__category_name=self.kwargs['category'])

接下来在你的URLS.py中添加一个url,这样它就可以被访问了。我们使用category_name作为url的一部分所以它是人类可读的

from .views import BrandListView

urlpatterns = [
path('brands/<str:category>/', PublisherBookList.as_view()), name= "brand_list"
]

然后,当你循环遍历模板中的类别时,创建一个指向url

的链接
{% for category in categories %}
{{category.category_name}} : <a href="{% url 'brand_list' category.category_name %}">See brands in category</a>
{% endfor %}

只要您的类别名称相当简单,这就可以工作。如果没有,您可能希望在URL中使用ID,或者向模型添加一个填充字段并使用它。

相关内容

最新更新