我想从 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() 的调用。
如果您想将年份作为查询集中其他数据的一部分,或者如果您想计算每年发生的频率,这将很有用。
如果您只想要不同的年份列表,您的解决方案同样好。
