4

だから私はそれぞれにいくつあるeventsかによって最も人気のあるリストを取得しようとしています。attendees'event'

モデル

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 :\

私はこれについていくつかの洞察を本当に感謝します。私がしていることは機能していません。人気のあるイベントのクエリを取得するにはどうすればよいですか?

4

1 に答える 1

9

注釈を使用する:

from django.db.models import Count

popular_events = Events.objects.annotate(attendee_count=Count('attendee')).filter(attendee_count__gt=50)
于 2012-06-20T20:18:32.740 に答える