按DateTimeField的Year元素排序对象列表

时间:2013-11-04 09:33:38

标签: python django

我在models.py

中定义了以下模型
class Schoolclass(models.Model):
    ...
    date_created = models.DateTimeField('date created')

在我的views.py中,我想订购与date_created相关的仅限年份的Schoolclass对象列表。我特别不希望命令考虑DateTimeField的任何其他元素。原因是我希望通过不同的领域进行二次排序。

这是我能想到的,但它不起作用。

def index(request):
    class_list = SchoolClass.objects.order_by('date_created__year')

如果我在运行上面的代码时遇到以下错误,可以帮助我:

Join on field 'date_created' not permitted. Did you misspell 'year' for the lookup type?

1 个答案:

答案 0 :(得分:0)

问题是year字段仅存在于Python中,而不存在于数据库中。我想你将不得不使用extra()并将它显式显示在数据库中,它应该按datetime字段的year部分排序。具体如何取决于您的数据库。

这适用于MySQL:

def index(request):
    class_list = SchoolClass.objects.extra(select={'year_created': 'YEAR(date_created)'}, 
                                           order_by=['year_created'])

如果您正在使用其他数据库,则必须使用等效操作替换YEAR(date_created)以从日期时间字段中提取年份。