2010-12-17 114 views
3

答案可能(也可能)已經存在,但我有一個艱難的時間試圖找出什麼尋找。Django「通過」模型迭代

我有三種模式:人員,組和會員。

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) 

我想獲得的人的名單,並很容易獲得,一個人屬於但是組它不是成員和人之間的1對1的關係。看起來最簡單的方法是在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) 

參見文檔here