2
因此,我想通過多少個attendees
在每個'event'
中獲得最受歡迎events
的列表。在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 :\
我真的很感激一些洞察到這一點。我正在做的是不工作。如何獲得熱門事件的查詢?
克里斯有正確的答案。請注意,您還可以通過在Attendee模型的ForeignKey字段上指定'related_name'關鍵字參數來避免創建自定義'參與者'模型方法:https://docs.djangoproject.com/zh-CN/dev/topics/db/models /#inheritance-and-reverse-relations – twaddington
從技術上講,如果你可以使用類似'event_instance.attendee_set.all()'的東西,那麼你甚至不需要這樣做,但是,如果你想要的話你需要指定'related_name'作爲'attendees',然後OP可以使用'event_instance.attendees.all()'。 –