我在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?
答案 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)
以从日期时间字段中提取年份。