2016-11-14 38 views
0

組我有什麼,我相信這是一個簡單的請求,但我一直在打我的頭靠在牆上,我沒有得到任何聰明吧。的Django如何在多對多的關係動態

我使用的是django 1.10。我所試圖做的就是我的會員我的家人場分組列表

的模型是這樣的:

class Family(models.Model): 
    family_name = models.CharField(max_length=200) 

class Member(models.Model): 
    name = models.OneToOneField(User) 
    family = models.ManyToManyField(Family,blank=True,related_name='members') 

這樣我就可以把我的看法使用

members = Member.objects.order_by('family') 

members = Family.objects.order_by('family_name') 

這顯然擁有我的成員或我的家人,但不是兩個。我怎麼會得到這個成員名和他們的家人,然後由它分組?

輸出我尋找的一個例子是:

家族1

  • 會員1
  • 會員2

家族2

  • 成員1
  • 會員3

任何幫助,將不勝感激。

回答

1

第一個有什麼問題?如果您想通過家庭的name來訂購吧,這樣做:

members = Member.objects.order_by('family__family_name') 

這些成員都必須通過.family提供他們的家庭。如果你想保存,當你通過這些成員循環的數據庫查詢和訪問他們的家人,你可以添加一個select_related

members = Member.objects.order_by('family__family_name').select_related('family') 

在另一方面,如果你真的通過他們的成員希望家人,然後循環,做:

families = Family.objects.order_by('family_name').prefetch_related('members') 
for fam in families: 
    // do sth. with family 
    for mem in fam.members.all(): 
     // do sth. with member 

prefetch_related將只有2個的數據庫查詢,該運行無論多少家庭或成員。

+0

@schwobaseggle這個結果與我已經得到的結果是一樣的。我認爲你是在正確的地步。家庭是我需要的,但不知道如何得到它。我已經在我的問題中添加了一個示例,看看是否有助於如何實現此目標。 – jAC

+0

對不起,聽起來很愚蠢,但我如何構建這個查詢集,我有他們的成員的家庭,我可以從一個嵌套的循環以相同的方式拉來在模板中使用? – jAC

+1

不知道我是否得到了你:)你可以將'QS'傳遞給模板上下文,並且只使用嵌套模板循環ála:'{%for fam in families%} .. {%for mem in fam.members。所有%} ... {%endfor%} {%endfor%}' – schwobaseggl