Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
在django中使用外键进行分类_Django_Django Models_Django Views_Django Templates - Fatal编程技术网

在django中使用外键进行分类

在django中使用外键进行分类,django,django-models,django-views,django-templates,Django,Django Models,Django Views,Django Templates,我想一次显示具有特定外键的产品名称 my models.py: from django.db import models class Company(models.Model): name = models.CharField(max_length=200) def __str__(self): return self.name class Product(models.Model): company = models.ForeignKey(Co

我想一次显示具有特定外键的产品名称

my models.py:

from django.db import models


class Company(models.Model):
    name = models.CharField(max_length=200)

    def __str__(self):
        return self.name


class Product(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='comapny')
    name = models.CharField(max_length=200)

    def __str__(self):
        return self.name
我希望它显示公司名称作为列表标题,然后是该特定公司所有产品的列表,但不知道如何像那样过滤它并显示在html上

my views.py:

class Hydraulic(ListView):
    template_name = 'hydraulics.HTML'
    context_object_name = 'hydraulic'
    model = models.Product
有人能告诉我如何过滤foreignkey的名称并将其注入HTML吗

谢谢你在你的模型中,我想你在相关的公司里输入了一个错误

首先,将查询集添加到视图中,并按公司排序。使用
select\u related
将防止访问每个公司名称的数据库,因为它已经从初始查询中获取

液压类(列表视图): 模板名称='hydraulics.HTML' 上下文\对象\名称='液压' queryset=models.Product.objects。选择相关(“公司”)。订购人(“公司”) 然后,在模板中,您可以像这样迭代:

{% for item in hydraulic %}
 {% ifchanged item.company %}
      <h1> {{ item.company }} </h1>
 {% endifchanged %}
      <div> {{ item }} </div>
{% endfor %}
{%中的项目为%}
{%ifchanged item.company%}
{{item.company}
{%endifchanged%}
{{item}}
{%endfor%}

使用
ifchanged
标记将只显示一次公司名称,然后是它的所有产品。

嘿,谢谢你的回答,但是如果有某些公司及其产品我不想显示在所有页面上,该怎么办?我不知道你的意思是什么,但是你可以使用
你的\u queryset.exclude(company='id\u company')排除查询中的一些公司
或者在模板中,您可以跳过一个简单的if条件。好的,谢谢,即使产品没有按照公司名称排序,这也会起作用,对吗?是的。唯一的问题是,
ifchanged
会查看以前的记录,因此有时如果查询集中的两个以下产品没有相同的公司,它可能会再次打印该公司。但也许这也是你想要实现的目标。然后,你需要按照我在回答中提到的公司进行订购(使用
order\u by
)。您不能迭代一个无序的查询集,并期望它在您的模板中被订购(如“打包”的公司)。