问题描述
我试图在模板中显示来自不同模型的数据,但我不知道为什么它无法正常工作。
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 %}
为什么不显示公司名称?
1楼
您的外键关系是错误的方法...按照当前定义它们的方式,一个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 %}
2楼
访问后向关系时仅使用“ _set”。 没有
loc.company_set.all
因为每个位置只有一个公司(这就是外键。您可以通过loc.company访问该位置的公司)。 如果您希望位置具有多个公司,请查看solarissmoke的答案(将ForeignKey属性放在Company而不是Location上),或使用ManyToManyField关系(这将允许公司具有多个位置,每个位置具有多个公司) 。
然后,您可以通过在模板中执行以下操作来访问给定位置的所有公司:
{% for loc in loc_list %}
{% for entry in loc.company.all %}
{{entry.name}}
{% endfor %}
{% endfor %}
您还可以使用related_name(company.locations)访问给定公司的所有地点。
3楼
简短答案:
{% for loc in loc_list %}
{{loc.company.name}}
{% endfor %}