django用外键获取模型

时间:2016-06-22 14:12:59

标签: sql django foreign-keys django-queryset

我们说我的数据库中有2个表。其中一个名为Person,它具有属性&name;#name;并且' id'另一个叫做角色,它有属性' person'(这是Person表中id的外键)和' id'。 现在,我想查询给出像David这样的名字,查找具有该名称的所有人,并返回与之关联的角色。我们知道每个人最多只能扮演一个角色。

我知道我无法使用Person.objects.filter(name=David).select_related('Role')因为Role不是Person的属性。无论如何,我只有1次击中DB才能得到这个?

2 个答案:

答案 0 :(得分:1)

这实际上是一个非常简单的查询,与其他一些答案相反。要记住的是,如果你想要角色,你应该从角色模型开始。所以只需从那里跟随关系:

Role.objects.filter(person__name='David')

答案 1 :(得分:0)

为了得到这些人,就像你已经写过的那样:

Person.objects.filter(name='David')

获取与任何名为David的人相关的所有角色:

Role.objects.filter(person__name='David')

获得某个人的角色:

Role.objects.filter(person=person)

所以我从你的问题中理解的是你想要做这样的事情:

for person in Person.objects.filter(name='David'):
    person_roles = Role.objects.filter(person=person)
    # ...
    # do something with person_roles (that should contain
    # at most one object according to your constraints).