Python 大于Django中的索引

Python 大于Django中的索引,python,django,indexing,django-3.2,Python,Django,Indexing,Django 3.2,在Django-3.2中,类索引获取一个位置参数表达式,该表达式允许在表达式上创建函数索引 是否可以在表达式大于的整数字段上创建索引?比如说 我的模型: class Product(models.Model): description = models.CharField(max_length=50) delivery_date = models.DateTimeField(null=True) quantity = models.IntegerField(validat

在Django-3.2中,类索引获取一个位置参数表达式,该表达式允许在表达式上创建函数索引

是否可以在表达式大于的整数字段上创建索引?比如说

我的模型:

class Product(models.Model):
    description = models.CharField(max_length=50)
    delivery_date = models.DateTimeField(null=True)
    quantity = models.IntegerField(validators=[MinValueValidator(0)])

通常我有一个过滤器(数量>0)。如何在此基础上创建表达式索引?

您可以使用
ExpressionWrapper
创建函数索引:

from django.db.models import BooleanField, ExpressionWrapper, Index, Q

class Product(models.Model):
    # …

    class Meta:
        indexes = [
            Index(
                ExpressionWrapper(
                    Q(quantity__gt=0),
                    output_field=BooleanField()
                ),
            name='some_name_for_the_constraint'
          )
        ]

这将相当快地发挥作用。

简单的数量索引难道还不够吗?这是一个B-树,因此可以非常快速地确定对象,优点是它可以用于任何值。
CREATE INDEX `some_name_for_the_constraint`
          ON `app_name_product` ((`quantity` > 0));
class Product(models.Model):
    # …
    quantity = models.IntegerField(
        db_index=True,
        validators=[MinValueValidator(0)]
    )