Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何正确显示相关模型中的对象列表?_Python_Django_Python 2.7_Django 1.11 - Fatal编程技术网

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

Python Django:如何正确显示相关模型中的对象列表?,python,django,python-2.7,django-1.11,Python,Django,Python 2.7,Django 1.11,我有两种型号:产品和部分 型号。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

我有两种型号:产品和部分

型号。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)
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 %}
我正试图在模板中显示包含其产品的部分列表。我为此任务使用了
regroup
标记,但存在一些问题

1) 没有任何产品的部分将不可见。如何显示没有产品的部分

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)
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 %}
模板:

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)
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 %}

发送在上下文数据中包含产品的
部分,而不是
产品

context['sections'] = Section.objects.exclude(product_set__isnull=True)
部分的模板循环中

{% for section in sections %}
    {{ section.name }}
    {% for product in section.product_set.all %}
        {{ product.name }}
    {% endfor %}
{% endfor %}
阅读更多有关在上进行django查询的信息


发送在上下文数据中包含产品的
部分,而不是
产品

context['sections'] = Section.objects.exclude(product_set__isnull=True)
部分的模板循环中

{% for section in sections %}
    {{ section.name }}
    {% for product in section.product_set.all %}
        {{ product.name }}
    {% endfor %}
{% endfor %}
阅读更多有关在上进行django查询的信息


我建议创建一个默认节,并将其添加到所有具有空节值的
产品中。然后您可以查询
Section
model以获得所有的Section及其相关产品。这将简化设计,并从代码中删除所有空检查

查询将采用以下格式:

sections=Section.objects.all().prefetch_相关('product_set'))

现在您已经有了
部分
以及它们的产品。您可以创建一个字典,其中键为
section\u id
,值为产品列表

section_products_dict = {}
for section in sections:
    section_products_dict[section.id] = section.product_set.all()
然后您可以将此词典传递给模板。一旦您有了
部分
列表,您就可以以多种不同的方式查询产品。我已经创建了字典,但您可以根据需要使用它(就像直接在模板中使用一样)


如果无法添加默认节,则对产品和节执行两个单独的查询,并将它们与
section\u id
作为键和值作为列表或
products
组合,我建议创建一个默认节,并将其添加到所有具有空节值的
products
中。然后您可以查询
Section
model以获得所有的Section及其相关产品。这将简化设计,并从代码中删除所有空检查

查询将采用以下格式:

sections=Section.objects.all().prefetch_相关('product_set'))

现在您已经有了
部分
以及它们的产品。您可以创建一个字典,其中键为
section\u id
,值为产品列表

section_products_dict = {}
for section in sections:
    section_products_dict[section.id] = section.product_set.all()
然后您可以将此词典传递给模板。一旦您有了
部分
列表,您就可以以多种不同的方式查询产品。我已经创建了字典,但您可以根据需要使用它(就像直接在模板中使用一样)


如果无法添加默认部分,则对产品和部分执行两个单独的查询,并将它们与
部分_id
作为键和值作为列表或
产品

>1)没有任何产品的部分合并。如何显示没有产品的部分?如果没有链接到某个节的产品实例,则它们是不相关的,是吗?你想如何选择“相关的无关对象”?@py_dude你好!你完全正确!我想我需要重新组织我的代码。我的主要目标是展示与这些部分相关的所有部分和产品。如果没有产品的部分显示消息,如:无产品。我希望你能理解我。你有什么想法吗?>1)没有任何产品的部分看不见。如何显示没有产品的部分?如果没有链接到某个节的产品实例,则它们是不相关的,是吗?你想如何选择“相关的无关对象”?@py_dude你好!你完全正确!我想我需要重新组织我的代码。我的主要目标是展示与这些部分相关的所有部分和产品。如果没有产品的部分显示消息,如:无产品。我希望你能理解我。您对如何制作有什么想法吗?请您解释一下
产品集
在这里的意思好吗
Section
模型没有product字段,所以我有点困惑。product\u set是一个反向查找,您在product表中提到了Section外键。请查看此答案,以便更好地理解
\u set
事实上,在我的例子中,
Section
模型的名称为
FinSection
。所以我试着像
finsection\u set
那样写,但没有成功。提出错误。这是否意味着我需要在
ForeignKey
(部门模型的部门字段)中设置
相关的\u name
属性?您的产品型号名称是什么,请在它之后使用
\u set
您能解释一下
产品\u set
的含义吗
Section
模型没有product字段,所以我有点困惑。product\u set是一个反向查找,您在product表中提到了Section外键。请查看此答案,以便更好地理解
\u set
事实上,在我的例子中,
Section
模型的名称为
FinSection
。所以我试着像
finsection\u set
那样写,但没有成功。提出错误。这是否意味着我需要在
ForeignKey
(部门模型的部门字段)中设置
相关的\u name
属性?您的产品型号名称是什么,请在之后使用
\u set
谢谢您的建议。我正在尝试使用你的解决方案,它看起来很好,但我没有什么问题。让我试着解释一下。我对节进行如下排序:
section.objects.all().prefetch\u related('prodcut\u set')。order\u by('order\u by')
。它将返回一个带有下一个ID的部分:
3,1,6,5
。这是正确的。但是在
部分中,我有
{1:Queryset,3:Queryset,5:Queryset,6:Queryset,}
为什么要对dict排序?字典不保持顺序。使用