Django“通过”模型迭代

时间:2010-12-17 22:16:24

标签: django django-models

对此的答案可能(并且可能)已经存在,但我正在努力想要找到什么。

我有三种模式:人物,团体和成员资格。

class Person(Contact):
    first_name = models.CharField(_('first name'), max_length=200, blank=True)
    last_name = models.CharField(_('last name'), max_length=200, blank=True)

class Organization(Contact):
    title = models.CharField(_('title'), max_length=200)
    members = models.ManyToManyField(Person, blank=True, through='Membership')

class Membership(models.Model):
    person = models.ForeignKey(Person)
    organization = models.ForeignKey(Organization)
    position = models.CharField(max_length=64, blank=True)

我想获得一个人员列表,并且可以轻松访问一个人所属的群组,但这不是会员资格与人员之间的一对一关系。似乎最简单的方法是在Person中创建一个方法 get_memberships ,这将返回一个人与之关联的成员资格(如果有的话)。这是否有意义,从模型中以这种方式访问​​这种关系是合理的做法,还是有更好的方法去做?

1 个答案:

答案 0 :(得分:6)

Person.organization_set.all()应返回相关人员所属的组织列表。对于该组中的每个组织,您可以返回其位置,所以:

p = Person.objects.get(id=personid)

for o in p.organization_set.all():
    # you have o and p, you should be able to find a unique m.
    m = Membership.objects.get(Person=p, Organization=o)

请参阅文档here