Django:如何正确显示相关模型中的对象列表?
Django: How correctly show list of objects in related models?
我有 2 个模型:Product 和 Section。
models.py:
class Section(models.Model):
name = models.CharField(max_length=255, blank=False, null=True,)
class Product(models.Model):
name = models.CharField(max_length=255, blank=False, null=True,)
section = models.ForeignKey(Section,on_delete=models.CASCADE)
我正在尝试在模板中显示部分及其产品的列表。我为此任务使用了 regroup
标签,但遇到了一些问题。
1) 没有任何产品的部分将不可见。如何显示没有产品的部分?
2) 在数据库中,某些产品在部分字段中具有 NULL 值。如何将这些产品归为一类?
如有任何建议或示例,我将不胜感激! =)
views.py:
context['products'] = Product.objects.select_related('section').order_by('section')
模板:
{% regroup products by section as products_by_section %}
{% for section in products_by_section %}
{{ section.grouper}}
{% for product in section.list %}
{{ product }}
{% endfor %}
{% endfor %}
发送 sections
在上下文数据中包含产品而不是 products
context['sections'] = Section.objects.exclude(product_set__isnull=True)
并在 sections
的模板循环中
{% for section in sections %}
{{ section.name }}
{% for product in section.product_set.all %}
{{ product.name }}
{% endfor %}
{% endfor %}
Read more for making django query on related objects
我建议创建一个默认部分并将其添加到所有具有空部分值的 products
。然后您可以查询 Section
模型以获取所有部分及其相关产品。这将简化设计,并从代码中删除所有空检查。
查询格式为:
sections = Section.objects.all().prefetch_related('product_set')
现在您已经 sections
连同他们的产品一起分组了。您可以创建一个字典,键为 section_id
,值为产品列表
section_products_dict = {}
for section in sections:
section_products_dict[section.id] = section.product_set.all()
然后你可以将这个字典传递给模板。拥有 sections
列表后,您可以通过多种不同方式查询产品。我已经创建了字典,但你可以根据需要使用它(比如直接在模板中使用)。
如果无法添加默认部分,则对产品和部分执行两个单独的查询,并将它们与 section_id
作为键和值作为列表或 products
.
组合
我有 2 个模型:Product 和 Section。
models.py:
class Section(models.Model):
name = models.CharField(max_length=255, blank=False, null=True,)
class Product(models.Model):
name = models.CharField(max_length=255, blank=False, null=True,)
section = models.ForeignKey(Section,on_delete=models.CASCADE)
我正在尝试在模板中显示部分及其产品的列表。我为此任务使用了 regroup
标签,但遇到了一些问题。
1) 没有任何产品的部分将不可见。如何显示没有产品的部分?
2) 在数据库中,某些产品在部分字段中具有 NULL 值。如何将这些产品归为一类?
如有任何建议或示例,我将不胜感激! =)
views.py:
context['products'] = Product.objects.select_related('section').order_by('section')
模板:
{% regroup products by section as products_by_section %}
{% for section in products_by_section %}
{{ section.grouper}}
{% for product in section.list %}
{{ product }}
{% endfor %}
{% endfor %}
发送 sections
在上下文数据中包含产品而不是 products
context['sections'] = Section.objects.exclude(product_set__isnull=True)
并在 sections
{% for section in sections %}
{{ section.name }}
{% for product in section.product_set.all %}
{{ product.name }}
{% endfor %}
{% endfor %}
Read more for making django query on related objects
我建议创建一个默认部分并将其添加到所有具有空部分值的 products
。然后您可以查询 Section
模型以获取所有部分及其相关产品。这将简化设计,并从代码中删除所有空检查。
查询格式为:
sections = Section.objects.all().prefetch_related('product_set')
现在您已经 sections
连同他们的产品一起分组了。您可以创建一个字典,键为 section_id
,值为产品列表
section_products_dict = {}
for section in sections:
section_products_dict[section.id] = section.product_set.all()
然后你可以将这个字典传递给模板。拥有 sections
列表后,您可以通过多种不同方式查询产品。我已经创建了字典,但你可以根据需要使用它(比如直接在模板中使用)。
如果无法添加默认部分,则对产品和部分执行两个单独的查询,并将它们与 section_id
作为键和值作为列表或 products
.