0

我在 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?
4

1 回答 1

0

问题是该year字段仅存在于 Python 中,而不存在于数据库中。我想您必须使用extra()并明确说明它应该按日期时间字段的年份部分排序的数据库。究竟如何做到这一点将取决于您的数据库。

这应该适用于 MySQL:

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

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

于 2013-11-04T09:55:48.307 回答