我想查询主题中的最大条目到最小条目。这样:
models.py
class Topic(models.Model):
title = models.CharField(max_length=140, unique=True, verbose_name=_("Title"))
created_at = models.DateTimeField(auto_now=True, verbose_name=_("Created at"))
其他型号是:
class Entry(models.Model):
topic = models.ForeignKey(Topic, verbose_name=_("Topic"))
content = models.TextField(verbose_name=_("Content"))
created_at = models.DateTimeField(auto_now=True,verbose_name=_("Created at"))
首先,我想从 Topic.py 中仅过滤今天的条目。那是对的吗? :
def get_topic_today(self):
return self.filter(date=datetime.date.today()).order_by('title')
而且我想查询热门话题max to min。我认为我们可以使用select_related和从入口到主题模型的反向外键。但我不能这样做。例如,具有最多条目编号的主题必须是第一个并且最低。
答案 0 :(得分:2)
如果要将DateTimeField过滤到特定日期,可以使用__day
lookup。
def get_topic_today(self):
return self.filter(created_at__day=datetime.date.today()).order_by('title')
要获取相关模型的计数,请使用Count
annotation,然后对其进行降序排序:
Topic.objects.annotate(entry_count=Count('entry')).order_by('-entry_count')
答案 1 :(得分:1)
如果您想订购从最大条目到最小值的热门话题:
def get_topic_today(self):
return self.filter(created_at__date=datetime.date.today()).annotate(entry_count=models.Count('entry_set')).order_by('-entry_count')
答案 2 :(得分:0)
最短和最长日期
### please use range for selecting between dates
def get_topic_today(self):
return self.filter(created_at__range=[min_date, max_date]).order_by('title')
### (or) use greater than or lesser than
def get_topic_today(self):
return self.filter(created_at__gte=min_date, created_at__lte=max_date).order_by('title')