Python django如何在多个关系上动态分组

Python django如何在多个关系上动态分组,python,django,django-models,django-views,Python,Django,Django Models,Django Views,我有一个我认为很简单的要求,但我一直在碰壁,我没有因此变得更聪明 我正在使用django 1.10。我想做的是得到一个按我的家庭字段分组的成员列表 模型如下所示: class Family(models.Model): family_name = models.CharField(max_length=200) class Member(models.Model): name = models.OneToOneField(User) family = models.Ma

我有一个我认为很简单的要求,但我一直在碰壁,我没有因此变得更聪明

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

这显然对我的成员或家人有利,但不是两者都有利。我怎样才能让它既有成员的名字,又有他们的家庭,然后按它分组呢

我正在寻找的输出示例如下:

家庭1

  • 成员1
  • 成员2
家庭2

  • 成员1
  • 成员3

任何帮助都将不胜感激。

第一个有什么问题吗?如果要按族的
名称订购,请执行以下操作:

members = Member.objects.order_by('family__family_name')
这些成员都可以通过
.family
使用他们的家庭。如果要在遍历这些成员并访问其族时保存db查询,可以添加:

另一方面,如果确实需要族,然后通过其成员循环,请执行以下操作:

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

无论有多少家庭或成员,都将只使用2 db的查询来执行此操作。

@schwobasegle此操作的结果将与我已经获得的结果相同。我想你说得对。家庭是我需要的,但不知道如何得到它。我已经在我的问题中添加了一个示例,看看这是否有助于实现目标。很抱歉听起来很愚蠢,但是我如何将其构建到一个查询集中,在该查询集中,我可以以相同的方式从嵌套的for循环中提取族及其成员,以便在模板中使用?不确定我是否得到:)您可以将
QS传递给模板上下文并只使用嵌套模板循环:
{%forfam in fam%}..{%formem in fam.members.all%}…{%endfor%}{%endfor%}{%endfor%}
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