【问题标题】:Display objects and their foreign key objects显示对象及其外键对象
【发布时间】:2018-10-06 02:42:19
【问题描述】:

在显示数据方面需要一些帮助。

models.py

class Brand(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Car(models.Model):
    name = models.CharField(max_length=100)
    brand = models.ForeignKey(Brand, related_name='brands', on_delete=models.CASCADE)

    def __str__(self):
        return self.brand.name + " - " + self.name

views.py

def car_view(request):

    # pls halp

如何显示品牌列表以及每个品牌之后的汽车列表?示例如下所示。

<html>
    <ul>
    <li>Toyota</li>
    <ul>
        <li>Corolla</li>
        <li>Avensis</li>
        <li>Yaris</li>
    </ul>
    <li>Volkswagen</li>
    <ul>
        <li>Golf</li>
        <li>Transporter</li>
        <li>Passat</li>
    </ul>
    </ul>
</html>

【问题讨论】:

  • 到目前为止您尝试了哪些方法,又是如何失败的?
  • 我尝试使用 objects.get() 从数据库中获取对象我只知道如何显示所有品牌和所有汽车。但是他们的外国关键品牌下的某些汽车..没有结果
  • @newObject 首先更正您的related_name 值以更正含义类似于cars 而不是brand 检查我的答案以供参考

标签: django python-3.x django-models django-templates django-views


【解决方案1】:

首先修正modelrelated_name,

class Brand(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Car(models.Model):
    name = models.CharField(max_length=100)
    brand = models.ForeignKey(Brand, related_name='cars', on_delete=models.CASCADE)

    def __str__(self):
        return self.brand.name + " - " + self.name

您可以以brand.cars.all() 的身份从Brand 模型实例访问所有汽车

def car_view(request):  
    return render("list.html", {'brand_list': Brand.objects.all()})

模板将类似于

<!-- list.html -->
{% block content %}
     {% for brand in brand_list %}
          {{ brand.name }}
          {% for car in brand.cars.all %}
              {{car.name}}
          {% endfor %}
     {% endfor %}
{% endblock %}

【讨论】:

  • 谢谢,这里有一点错别字。brand.cars.all() 给了我汽车的品牌,因为在视图中必须有一定的 pk。但我需要在一页上展示所有品牌及其汽车。我需要在views.py中以某种方式循环它们吗?
  • 非常感谢!!我现在明白了。就这么简单!???!!!我想我什至看到过类似的东西,但经过一整天的搜索,不知道它是如何真正让我的大脑运作的...... :D 再次感谢
  • 如果答案中需要一些更正,请这样做@newObject 来帮助其他人:)
  • 这有可能逆转吗?比如,我喜欢先用过滤器查询汽车并显示它的品牌。谢谢你。
猜你喜欢
  • 2019-05-24
  • 2018-01-31
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2013-02-07
相关资源
最近更新 更多