2016-11-14 2 views
0

나는 간단한 요청이라고 믿지만 나는 벽에 머리를 때리고 있었고 더 이상 영리하지 못했다.django 어떻게 ManyToMany 관계를 동적으로 그룹화 할 것인가?

저는 장고 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
  • 회원이

가족이

  • 회원 1
  • 회원 3

도움을 주시면 감사하겠습니다.

답변

1

첫 번째 문제는 무엇입니까? 당신이 가족의 name하여 주문하려는 경우, 수행

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

이 회원 모두가 .family를 통해 사용할 수 그들의 가족이있다. 당신이 정말로 자신의 회원을 통해 가족과 다음 루프를 원하는 경우 반면에

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

, 수행 : 당신은 당신이이 회원 통해 반복되는 DB 쿼리를 저장할와 그 가족에 액세스하는 경우, 당신은 select_related을 추가 할 수 있습니다 :

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 DB를 쿼리,이 실행하지 않습니다 얼마나 많은 가족 또는 회원.

+0

@schwobaseggle이 결과는 이미 얻은 것과 같습니다. 나는 .family가 내가 필요로하는 것이지만 그것을 얻는 방법을 모르는 정확한 위치에 있다고 생각합니다. 내 질문에 예제가 추가되어 거기에 도달하는 데 도움이되는지 확인합니다. – jAC

+0

어리석은 소리에 대한 미안하지만, 어떻게 템플릿 내에서 동일한 방식으로 중첩 for 루프에서 가져올 수있는 멤버가있는 패밀리가있는 쿼리 집합으로 빌드 할 것이라고? – jAC

+1

잘 모르겠 으면 :) 템플릿 컨텍스트에'families' QS를 전달하고 중첩 된 템플릿 루프를 사용할 수 있습니다 :'{family %의 fam % %} .. {fam.members의 mem의 %}. 모든 %} ... {% endfor %} {% endfor %}' – schwobaseggl

관련 문제