我正在尝试在我的模板中显示来自不同模型的数据,但我不知道为什么它不能正常工作。
Models.py:
class Company(models.Model):
name = models.CharField(max_length=100)
class Location(models.Model):
company = models.ForeignKey('Company',
related_name='locations')
Views.py:
def sth(request):
loc_list = Location.objects.all()
return render(request, 'blabla/index.html', {'loc_list': loc_list})
模板:
{% for loc in loc_list %}
{% for entry in loc.company_set.all %}
{{entry.name}}
{% endfor %}
{% endfor %}
为什么公司名称没有显示?
答案 0 :(得分:2)
你的外键关系是错误的方式...你当前定义它们的方式,Location
只能有一个与Company
相关联,但在你的模板中你试图获取Company
的列表。
要使模板逻辑起作用,您的模型必须按如下方式定义:
class Company(models.Model):
name = models.CharField(max_length=100)
location = models.ForeignKey('Location')
class Location(models.Model):
# You probably need some other fields in here.
然后这会起作用:
{% for loc in loc_list %}
{% for entry in loc.company_set.all %}
{{entry.name}}
{% endfor %}
{% endfor %}
答案 1 :(得分:1)
仅使用" _set"访问后向关系时没有
loc.company_set.all
因为每个地点只有一家公司(就像ForeignKey那样。你可以通过loc.company访问该地点的公司)。如果您希望位置拥有多家公司,请查看solarissmoke的答案(将ForeignKey属性放在公司而不是位置上),或使用ManyToManyField关系(这将允许公司拥有多个位置和每个位置到有多家公司)。
然后,您可以通过在模板中执行此操作来访问给定位置的所有公司:
{% for loc in loc_list %}
{% for entry in loc.company.all %}
{{entry.name}}
{% endfor %}
{% endfor %}
您还可以使用related_name(company.locations)访问给定公司的所有位置。
答案 2 :(得分:1)
简短回答:
{% for loc in loc_list %}
{{loc.company.name}}
{% endfor %}