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



django 1.11及以后允许使用 F -expressions添加 nulls last选项以查询:

queryset = Person.objects.all().order_by(F('wealth').desc(nulls_last=True))

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

indexes = [
        models.Index(fields=['-wealth']),
]

我尝试了以下内容:

indexes = [
        models.Index(fields=[models.F('wealth').desc(nulls_last=True)]),
]

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

在django中使用 F -expressions可以做到这一点?

否,不幸的是,当前是不可能的(django< = 2.1(。如果您查看models.Index的来源,您会发现它假设参数fields包含模型名称,而没有其他。

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

幸运的是,由于Django 3.2,现在可以创建功能索引。您发布的示例必须通过将字段从fields移动到*expressions并添加名称来调整一点,这是使用表达式时所必需的。

indexes = [
    Index(F('wealth').desc(nulls_last=True), name='wealth_desc_idx'),
]

https://docs.djangoproject.com/en/3.2/ref/models/indexes/#expressions

相关内容

  • 没有找到相关文章

最新更新