簡體   English   中英

django如何動態地對ManyToMany關系進行分組

[英]django how to group on ManyToMany relationship dynamically

我有一個簡單的請求,但是我一直在碰壁,但我並沒有因此而變得更聰明。

我正在使用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

任何幫助,將不勝感激。

第一個怎么了? 如果要按家人的name訂購,請執行以下操作:

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

這些成員都可以通過.family獲得.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個數據庫查詢來運行該查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM