django 使用外键获取模型
django get model with foreign key
假设我的数据库中有 2 个 table。其中一个称为 Person,它具有属性 'name' 和 'id',另一个称为 Role,它具有属性 'person'(这是 Person [=20= 中 id 的外键) ]) 和 'id'。
现在我想进行一个查询,给定一个名字,如 David,找到所有具有该名字的人以及 returns 与他们相关的角色。我们知道每个人最多关联 1 个角色。
我知道我不能使用Person.objects.filter(name=David).select_related('Role')
因为Role 不是Person 的属性。无论如何,我只要点击 DB 一次就可以得到这个吗?
要得到人,就像你写的那样:
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).
这实际上是一个非常简单的查询,与其他一些答案相反。要记住的是,如果你想要角色,你应该从角色模型开始。因此,只需从那里向后跟踪关系:
Role.objects.filter(person__name='David')
假设我的数据库中有 2 个 table。其中一个称为 Person,它具有属性 'name' 和 'id',另一个称为 Role,它具有属性 'person'(这是 Person [=20= 中 id 的外键) ]) 和 'id'。 现在我想进行一个查询,给定一个名字,如 David,找到所有具有该名字的人以及 returns 与他们相关的角色。我们知道每个人最多关联 1 个角色。
我知道我不能使用Person.objects.filter(name=David).select_related('Role')
因为Role 不是Person 的属性。无论如何,我只要点击 DB 一次就可以得到这个吗?
要得到人,就像你写的那样:
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).
这实际上是一个非常简单的查询,与其他一些答案相反。要记住的是,如果你想要角色,你应该从角色模型开始。因此,只需从那里向后跟踪关系:
Role.objects.filter(person__name='David')