2017-07-21 23 views
2

我想从MyModel实例日期属性中获取年份列表。如何以优化的方式使用django queryset提取年份列表?

这是我现在这样做的方法:

dates = MyModel.objects.filter(site=site).dates('date', 'year') 
years = [date.year for date in dates] 

结果是这样的:

dates = [datetime.date(2004, 2, 1), datetime.date(2005, 3, 1)] 
years = [2004, 2005] 

有没有什么简单的方法做到这一点?任何帮助,将不胜感激!

+4

你有什么问题?对我来说似乎很简单。 –

+0

@丹尼尔我只是想知道我是否能够以更简单的方式,一行或其他方式来完成。如果我目前的代码是好的,我不会改变它:) – Dibidalidomba

回答

2

对于Django 1.10及更高版本,您可以使用ExtractYear。您可以通过这样获得的年名单:

from django.db.models.functions import ExtractYear 
dates = MyModel.objects.filter(site=site)\ 
         .annotate(year=ExtractYear('date'))\ 
         .values('year') 

注意,与您的解决方案,这并不返回千年的独特列表。如果你想要一个清晰的列表,你应该在链中添加一个distinct()的调用。

如果您希望将年份作为查询集中其他数据的一部分,或者您想要统计每年发生的频率,那么这很有用。

如果你只是想要明确的年份列表,你的解决方案是一样好。

+0

我在这个项目中使用Django 1.9,但总是很高兴知道在更高版本中有这样的东西:)谢谢。 – Dibidalidomba

相关问题