用于查询搜索的Django多个.dates()

时间:2015-11-09 19:43:53

标签: django model

我有一个类似

的模块
class Entry(models.Model):
    user = models.ForeignKey(User)

    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(default=datetime.datetime.now())

    #
    # date for the post
    date = models.DateField()

date存储帖子的显示日期。我想得到的是用户所有帖子的所有月份和年份的列表。所以它看起来像

7/2015
8/2015
10/2015

我试过这个

Entry.objects.filter(user=self.user) \
            .order_by('-date') \
            .dates('date', 'year') \
            .distinct()

这给了我独特的年份..无论如何在查询中这样做我不必选择唯一的月份并迭代它们来创建一个对象。

我的原始sql看起来像

SELECT DISTINCT YEAR(date) AS y, MONTH(date) AS m FROM entries WHERE userid ='". $this->id ."' ORDER BY date DESC

1 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,我认为您只需要使用month作为QuerySet.dates函数的第二个参数。例如,

self.user.entry_set.order_by('-date').dates('date', 'month')

会返回所有self.user Entry的不同年/月值列表。

然后,您可以根据需要格式化每个日期时间对象。