我有两个模型对象:GEO,SHIP和CREW。船员,船舶和地理分别有一对多的关系。 GEO中可以有0-n个船只。每艘船,可以有0-n 如果我拉出GEO清单:
GEO = models.Geo.objects.all()
如何引用所有GEO,循环SHIPS,然后在每个船上,船员......在模板中?
这是我的模特:
class Geo (Unit):
coverage = models.TextField(null=True)
def __str__(self):
return self.Name
class Ship (Unit):
HullNumber = models.TextField(null=True)
Origin = models.CharField(max_length=3, choices=ALLEGIENCE_CHOICES, default='FED')
Geo = models.ForeignKey(Geo)
def __str__(self):
return self.Name
class Crew (models.Model):
CrewType = (
('O', 'Officer'),
('E', 'Enlisted'),
('C', 'Civilian'),
)
Geo = models.ForeignKey(Geo)
Ship = models.ForeignKey(Ship)
Type = models.CharField(max_length=1, choices=CrewType)
Position = models.CharField(max_length=20)
def __str__(self):
return self.Position
由于
答案 0 :(得分:1)
在views.py
中,您只需传递Geo
的列表:
def crew_list(request):
return render(request, 'crew_list.html', {'geo_list': Geo.objects.all()})
然后在模板中迭代每个Geo
的相关船员/工作人员:
{% for geo in geo_list %}
<h1>{{ geo }}</h1>
{% for ship in geo.ship_set.all %}
<h2>{{ ship }}</h2>
<ul>
{% for crew in ship.crew_set.all %}
<li>{{ crew }} - {{ crew.get_Type_display }}</li>
{% endfor %}
</ul>
{% endfor %}
{% endfor %}
另一种选择是将Geo / Ship订购的Crew
列表传递给模板,并使用ifchanged模板标记显示“已更改”的地理位置和船员的船只。