如何在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
相关产品推荐
相关产品推荐

