2011-04-12 6 views
0

내가 좋은 오래된 사람/그룹/회원 관계장고 정렬 object_list으로 필드를 통해

class Person(models.Model): 
    name = models.CharField(max_length=128) 

    def __unicode__(self): 
     return self.name 

class Group(models.Model): 
    name = models.CharField(max_length=128) 
    members = models.ManyToManyField(Person, through='Membership') 

    def __unicode__(self): 
     return self.name 

class Membership(models.Model): 
    person = models.ForeignKey(Person) 
    group = models.ForeignKey(Group) 
    date_joined = models.DateField() 
    invite_reason = models.CharField(max_length=64) 

이 있고 난 (URL에 지정된) 그룹에 속하는 사람들의 목록을 표시하는 일반보기를 원하는 말 Membership 클래스의 date_joined 필드로 정렬됩니다. 난 그냥이

def group_list(request, pagina): 
    return list_detail.object_list(
     request, 
     queryset = Person.objects.filter(group__name = slug), 
     template_object_name = 'person', 
     extra_context = { 'membership' : Membership.objects.all() }, 

     ) 

같은보기를 할 수있는 생각 그리고 바로 membership__date_joined를 통해 템플릿에 date_joined하지만 운이

답변

1

실제로 원하는 것은 회원 개체에서 시작하는 것입니다. 이것은 Person과 Group의 특정 조합에 대해 유일한 유일한 것입니다. Person에서 시작하는 경우, 자신의 멤버십에 액세스하면 모두이되며 원하는 것은 아닙니다. 그래서 :

은 템플릿에서 지금
return list_detail.object_list(
    request, 
    queryset = Membership.objects.filter(group__name = slug), 
    template_object_name = 'membership', 
) 

:

{% for member in membership %} 
    {{ member.person.name }}: {{ member.date_joined }} 
{% endif %} 
+0

사실 난 그냥이 더 많거나 아리아의 위, 나는 당신이 필터링을 수행 할 수 있습니다 말을 제외하고 덜 동일한 솔루션입니다 것으로 나타났습니다 목록 이해력이 아니라 데이터베이스. –

+0

당신 말이 맞아요. 나는 단지 두 번째 접근법이 어리석은 지 깨달았습니다. 목록 이해력이이 경우 완전히 무용지물이었습니다 ... 회원들을위한 ... ......... – arie

+0

FUDGE! FUDGE! 그것이 내 주변을 감싸는 데 영원히 걸렸습니다. 단순한. 나는 이제 질문 모음을 이해할 수 있다고 생각합니다. 백만 명이 고맙습니다. – takosuke

0

하나의 옵션은 중간 모델에 직접 필터링 할 수 없을 것이다 액세스 :

members = [member.person for member in Membership.objects.filter(group__name=slug).order_by('-date_joined')] 

또는 그럼 그냥 members = Membership.objects.filter(group__name=slug).order_by('-date_joined')

이 같은 템플릿에이 목록을 반복 :

{% for member in members %} 
    {{ member.person.name }} : {{ member.date_joined }} 
{% endfor %} 
관련 문제