Skip to main content
 首页 » 编程设计

python之如何以优化的方式使用 Django 查询集提取年份列表

2024年10月01日37oomusou

我想从 MyModel 实例日期属性中获取年份列表。

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

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] 

有没有更简单的方法呢?任何帮助将不胜感激!

请您参考如下方法:

对于 Django 1.10 及更高版本,您可以使用 ExtractYear .您可以通过这样做获得年份列表:

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

请注意,与您的解决方案不同,这不会返回不同的年份列表。如果您想要一个不同的列表,您应该在链中添加对 distinct() 的调用。

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

如果您只想要不同的年份列表,您的解决方案同样好。