django按isnull值排序?

时间:2012-03-10 17:50:01

标签: django isnull

我有一个datetime字段,该字段可以为null,id就像执行qs.order_by('field__isnull','name'),但这导致:

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

这有可能吗?

3 个答案:

答案 0 :(得分:8)

可能有更好的方法,但有一种可能性是注释您的查询集:

from django.db.models import Count
qs.annotate(null_count=Count('field_name')).order_by('null_count')

答案 1 :(得分:4)

不幸的是,Django没有提供功能IsNull,该功能可用于订购,注释等。 (它确实提供了查询查询,但只能用于过滤。) 但是,您可以自己定义函数:

from django.db.models import BooleanField, Func

class IsNull(Func):
    _output_field = BooleanField()
    arity = 1
    template = '%(expressions)s IS NULL'

现在,您可以像这样订购查询集:

qs.order_by(IsNull('field'), 'name')

答案 2 :(得分:-2)

我希望你的模型是这样的:

    date_deleted = models.DateTimeField(blank=True, null=True)

如果是真的 然后你可以这样做:

qs.order_by('-date_deleted')