2016-08-23 93 views
2

我想從主題中的最大條目到最小條目查詢。這樣的:如何在Django中查詢max到min?

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') 

而且我想查詢流行話題最大到最小。我認爲我們可以使用select_related和從主題模型到主題模型的反向外鍵。但我做不到。例如,具有最多條目編號的主題必須是第一個並且是最低的。

+0

什麼是自我?該代碼是否按照你想要的去做? – Sayse

+0

class TopicQuerySet(QuerySet):對不起,我忘了寫課程。我只想在今天過濾enrty。 – bysucpmeti

回答

2

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') 
+0

'Entry' /'Topic'類沒有'date'字段,但是'created_at'。 – Todor

+0

@Todor哎呀!固定。 –

0

最低和最高如果你想一個DateTimeField字段過濾特定的一天,你可以使用__day lookup日期

### 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') 
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')