如何在视图中获取模型的死者

时间:2014-12-21 04:58:48

标签: django django-models

我有两个模型对象: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

由于

1 个答案:

答案 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模板标记显示“已更改”的地理位置和船员的船只。