对此的答案可能(并且可能)已经存在,但我正在努力想要找到什么。
我有三种模式:人物,团体和成员资格。
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 ,这将返回一个人与之关联的成员资格(如果有的话)。这是否有意义,从模型中以这种方式访问这种关系是合理的做法,还是有更好的方法去做?
答案 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。