django建立模型之间的正确关系

时间:2019-07-11 17:45:26

标签: python django

我是Django的新手,试图弄清楚如何设置我的模型,以便实现我的想法。在我的Web应用程序上,许多乘客可以通过表格预订许多航班。

我想显示与特定航班相关的所有乘客。

示例:伦敦=>巴黎| [“ Bob”,“ Alice”,“ Bill”] ,然后我将遍历模板中的该列表。

抱歉,这对您来说太简单了。

我尝试通过views.py中的id获取单个航班,然后在模板中显示数据:{{london.passengers.name}},但返回None

views.py

def flights(request):

    london = Flight.objects.get(id=1)
    context = {'london': london}
    return render(request, 'flights.html', context)

models.py

# Passenger model.
class Passenger(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name


# Flight model.
class Flight(models.Model):
    origin = models.CharField(max_length=50)
    destination = models.CharField(max_length=50)
    duration = models.IntegerField(null=True, blank=True)

    passengers = models.ManyToManyField(Passenger)

    def __str__(self):
        return self.origin + " => " + self.destination

1 个答案:

答案 0 :(得分:3)

Passenger关联的flight个对象列表可以通过以下方式获取:

def flights(request):
    london = Flight.objects.get(id=1)
    passengers = london.passengers.all()
    context = { 'london': london, 'passengers': passengers }
    return render(request, 'flights.html', context)

,然后使用以下命令在模板中呈现它:

{% for passenger in passengers %}
    {{ passenger.name }}
{% endfor %}

或者您也可以使用london.passengers.all在模板中对其进行访问,并使用以下命令对其进行迭代:

{% for passenger in london.passengers.all %}
    {{ passenger.name }}
{% endfor %}

我个人更喜欢在视图中确定passengers,因为视图确定呈现的内容,而模板仅确定如何