用于创建索引的Django"NULLS LAST"

Vid*_*dak 5 python django indexing null django-models

Django 1.11及更高版本允许使用F-expressions为nulls last查询添加选项:

queryset = Person.objects.all().order_by(F('wealth').desc(nulls_last=True))
Run Code Online (Sandbox Code Playgroud)

但是,我们希望使用此功能来创建索引.模型定义中的标准Django索引:

indexes = [
        models.Index(fields=['-wealth']),
]
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方面:

indexes = [
        models.Index(fields=[models.F('wealth').desc(nulls_last=True)]),
]
Run Code Online (Sandbox Code Playgroud)

返回AttributeError: 'OrderBy' object has no attribute 'startswith'.

这可以F在Django中使用-expressions吗?

Dan*_*per 5

不,不幸的是,目前 (Django <=2.1) 是不可能的。如果您查看 的来源models.Index,您将看到它假定参数fields包含模型名称而没有其他任何内容。

作为一种解决方法,您可以在迁移中使用原始 SQL 手动创建索引。