2012-06-20 3 views
2

의 목록을 얻으려는 중 에 얼마나 많은 attendees이 있는지 확인하려고합니다.Django에서 '가장 인기있는'목록 가져 오기

모델

class Event(models.Model): 
    heading = models.CharField(max_length=200) 
    sub_heading = models.CharField(max_length=200, null=True, blank=True) 
    url = models.CharField(max_length=200, null=True, blank=True) 
    description = models.TextField() 
    tags = models.ManyToManyField(Tag, null=True, blank=True) 
    date = models.DateTimeField() 
    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 

    def attendees(self): 
     return Attendee.objects.filter(event=self) 

class Attendee(models.Model): 
    event = models.ForeignKey(Event) 
    content_type = models.ForeignKey(ContentType, related_name='event_attendee') 
    object_id = models.PositiveIntegerField() 
    profile = generic.GenericForeignKey('content_type', 'object_id') 

조회수

def event(request, id): 
    ... 
    events = Events.objects.all() 
    attendees = Attendee.objects.filter(event__in=events).count() 
    if attendees > 50: 
     popular_events = Event.objects.filter(what should i filter by).annotate(attendees_count=Count('attendees')).order_by('-attendee_count') ??? 
    # I'm probably going about this the wrong way :\ 

나는이에 대한 통찰력을 주셔서 감사합니다 정말 것입니다. 내가하고있는 일은 효과가 없다. 인기있는 이벤트를 어떻게 조회합니까?

+0

크리스는 정답이있다. Attendee 모델의'ForeignKey' 필드에'related_name' 키워드 인자를 지정하여 커스텀'attendees' 모델 메소드를 생성하는 것을 피할 수 있습니다 : https://docs.djangoproject.com/en/dev/topics/db/models/# inheritance-and-reverse-relations – twaddington

+1

기술적으로'event_instance.attendee_set.all()'과 같은 것을 사용한다면 기술적으로 그렇게 할 필요는 없다.하지만 네가 원하면 '참석자들 '이라면'related_name'으로 지정할 필요가 있습니다. 그러면 OP는'event_instance.attendees.all()'을 사용할 수 있습니다. –

답변

5

사용 annotations :

from django.db.models import Count 

popular_events = Events.objects.annotate(attendee_count=Count('attendee')).filter(attendee_count__gt=50) 
+0

정확히 내가 필요한 것. 고맙습니다. – Modelesq

관련 문제