You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django的HTML页面中展示外键关联的企业与对应产品数据

问题修复方案

存在的问题

  • models.py中Company、Products类的__str__方法缩进错误,没有归属到对应的类内部
  • Products模型的__str__方法调用了未定义的ref字段,会触发字段不存在报错
  • 外键字段设置了related_name="display",反向查询关联产品时不能使用默认的xxx_set写法,要使用自定义的related_name值
  • 模板中遍历关联产品的语法错误,且产品属性调用格式错误,item_engine应为item.engine
  • views.py中视图函数的代码缩进错误,context定义和return语句没有归属到Companies函数内部
修复后代码

1. models.py

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

    # 缩进调整到类内部
    def __str__(self):
        return str(self.name)


class Products(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name="display")
    engine = models.CharField(max_length=250, blank=True)
    cyl = models.CharField(max_length=250, blank=True)
    bore = models.CharField(max_length=250, blank=True)
    # 补充代码中用到的ref字段,若不需要可删除__str__方法中的ref引用
    ref = models.CharField(max_length=250, blank=True)

    # 缩进调整到类内部
    def __str__(self):
        return str(self.engine) + "  (ref:" + str(self.ref) + ")"

2. views.py

def Companies(request):
    # 缩进调整到函数内部
    context = {
        'categories': Company.objects.all()
    }
    return render(request, 'product_list.html', context)

3. HTML模板

{% for category in categories %}
<h2>{{ category.name }}</h2>
<!-- 使用自定义的related_name display遍历关联产品 -->
{% for item in category.display.all %}
    <p>{{ item.engine }} | 气缸数:{{ item.cyl }} | 缸径:{{ item.bore }}</p>
{% empty %}
    <p>该企业暂无关联产品</p>
{% endfor %}
{% endfor %}

内容的提问来源于stack exchange,提问作者user16433145

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 00:51:04