0

如何告诉 DSH 索引特定字段?我对历史模型所做的一些查询花费了太多时间

在此处输入图像描述

我有基础抽象模型,我所有的模型都继承自该模型。历史字段也在这个基本模型中定义:

class BaseModel(models.Model):
    class PublishingStatus(models.TextChoices):
        DRAFT = 'draft', _('Draft')
        ACCEPTED = 'accepted', _('Accepted'),
        REJECTED = 'rejected', _('Rejected'),
        MODIFIED = 'modified', _('Modified')

    publishing_status = models.CharField(
        max_length=9,
        choices=PublishingStatus.choices,
        default=PublishingStatus.DRAFT,
        help_text=_("Publishing status represents the state of the object. By default it is 'draft'")
    )

    history = HistoricalRecords(inherit=True)

我还在这个基本模型中添加了索引

class Meta:
    abstract = True
    indexes = [models.Index(fields=[
        'publishing_status',
    ])]

如果 Django Simple History 可以检查哪些字段被索引并在历史模型中创建相同的索引,那就太好了

也许有一种方法可以明确地告诉 django 简单历史必须另外索引哪个字段?

4

1 回答 1

0

我希望有更好的解决方案,但我最终创建了一个自定义迁移文件。首先,我为应用创建了一个空白迁移文件:

python manage.py makemigrations dosh --empty

然后我修改了这个新创建的空迁移文件并AddIndex为每个历史模型添加。

# Generated by Django 3.1.1 on 2020-10-15 06:49

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('dosh', '0002_auto_20201008_2155'),
    ]

    operations = [
        # ...
        migrations.AddIndex(
            model_name='historicaltense',
            index=models.Index(fields=['publishing_status'], name='htense_publish_status_idx')
        ),
        migrations.AddIndex(
            model_name='historicalsynonym',
            index=models.Index(fields=['publishing_status'], name='hsynonym_publish_status_idx')
        ),
        # ...
    ]

最后,我迁移了这些更改

python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, authtoken, comment, contenttypes, dosh, pinax_badges, sessions, social, users, vote
Running migrations:
  Applying dosh.0003_auto_20201015_0849... OK
于 2020-10-15T08:24:34.540 回答