Django"通过"模型迭代

Bob*_*rez 3 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)
Run Code Online (Sandbox Code Playgroud)

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

小智 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)
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档.