Django 组由注释 Min
Django group by annotate Min
我有两个模型:
models.py
class Representation(models.Model):
datetime = models.DateTimeField()
show = models.ForeignKey(Show)
class Show(models.Model):
name = models.CharField(max_length=512)
然后我想要接下来的 5 个即将到来的节目,我能做的最好的就是像那样聪明的 hack,但这只会使用大量的查询,我相信还有更多pythonic 的方式来做到这一点
i=5
list_shows = set()
while (len(list_shows) < 5:
for rep in Representation.objects.filter(datetime__gt=datetime.now()).order_by('-datetime')[:i]:
list_shows.add(rep.show)
i+=1
if i>100:
break
我也试过这样的方法:
from datetime import datetime
from django.db.models import Min
Show.objects.annotate(date=Min('representation__datetime')).filter(date__gte=datetime.now()).order_by('date')[:5]
但这不包括昨天已经播放但今晚要播放的节目。
你能试试这个吗:
Show.objects.filter(representation_set__datetime__gt=datetime.now()).order_by('representation_set__datetime')[:5]
我有两个模型:
models.py
class Representation(models.Model):
datetime = models.DateTimeField()
show = models.ForeignKey(Show)
class Show(models.Model):
name = models.CharField(max_length=512)
然后我想要接下来的 5 个即将到来的节目,我能做的最好的就是像那样聪明的 hack,但这只会使用大量的查询,我相信还有更多pythonic 的方式来做到这一点
i=5
list_shows = set()
while (len(list_shows) < 5:
for rep in Representation.objects.filter(datetime__gt=datetime.now()).order_by('-datetime')[:i]:
list_shows.add(rep.show)
i+=1
if i>100:
break
我也试过这样的方法:
from datetime import datetime
from django.db.models import Min
Show.objects.annotate(date=Min('representation__datetime')).filter(date__gte=datetime.now()).order_by('date')[:5]
但这不包括昨天已经播放但今晚要播放的节目。
你能试试这个吗:
Show.objects.filter(representation_set__datetime__gt=datetime.now()).order_by('representation_set__datetime')[:5]