繁体   English   中英

Django:如何正确显示相关模型中的对象列表?

[英]Django: How correctly show list of objects in related models?

我有 2 个模型:产品和部分。

模型.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 值。 如何将这些产品归为一个部分?

我将不胜感激任何建议或示例! =)

视图.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 %}

我建议创建一个默认部分并将其添加到所有具有空部分值的products中。 然后您可以在Section模型上查询以获取所有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

发送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 %}

阅读有关相关对象进行 django 查询的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM