django - 如何在 Django html 页面中显示外键数据?
问题描述
我想在其相关公司下方显示公司标题及其产品。我是 django 的新手,我不完全理解这一点。
我的模型.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)
def __str__(self):
return str(self.engine) + " (ref:" + str(self.ref) + ")"
我的意见.py:
def Companies(request):
context = {
'categories': Company.objects.all()
}
return render(request, 'product_list.html', context)
我的html:
{% for category in categories %}
<h2>{{ category.name }}</h2>
{% for item in category.item_set.all %}
{{ item_engine }}
{% endfor %}
{% endfor %}
解决方案
仅对您的 HTML 文件进行如下更改,如果您使用的是 product_set.all,请确保类名是 Product:
{% for category in categories %}
<h2>{{ category.name }}</h2>
{% for item in category.product_set.all %}
{{ item.engine }}
{% endfor %}
{% endfor %}
如果仍然无法正常工作,请尝试删除 : + " (ref:" + str(self.ref) + ")" 而且,我认为您错误地显示了您的 models.py。str函数应该在如下类中:
class Company(models.Model):
name = models.CharField(max_length=250)
def __str__(self):
return str(self.name)
class Product(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)
def __str__(self):
return str(self.engine)
推荐阅读
- rsync - rysnc 传输的文件名与源文件名不同
- haproxy - 使用 Haproxy 的漏桶方法 - 速率限制
- sas - 一个 sql 查询创建两个单独的表
- c++ - 函数参数为 __builtin_constant_p?
- selenium - Robot Framework/Selenium 中的“可见”和“点击元素”有区别吗?
- vaadin - 拒绝尚未发布的文件的发布文件请求。尝试了所有选项,但没有奏效
- angular - 从另一个组件调用 ngOnInit() 时不会刷新组件
- webpack - 如何修复流程以查看 package.json “module”而不是“main”
- outlook - Office 加载项无法在带有 Exchange 2016 的 Safari 上运行
- python - 从 2 个数据帧中删除重复项