django - 通过迁移将索引添加到Django中的模型字段

标签 django django-models django-admin django-migrations django-2.1

我正在尝试使用Field.db_index为具有迁移的应用程序在模型字段上添加索引。查看Django's documentation我要做的就是设置db_index=True

class Person(models.Model):
    first_name = models.CharField()
    last_name = models.CharField(db_index=True)


然后我首先尝试了新的Django的Migration:

./manage.py makemigrations app-name


但是迁移似乎没有注意到更改,也没有添加用于创建索引的sql命令。所以我按照here的解释尝试了django-admin.py

django-admin.py sqlindexes app-name


但这也不打印sql命令,它退出并显示以下错误:

CommandError: App 'app-name' has migrations. Only the sqlmigrate and sqlflush commands can be used when an app has migrations.

最佳答案

好的,我设法使用Meta.index_together创建索引。这不是最干净的方法,因为我实际上并未将多个字段一起索引,但它可用于makemigrations

class Person(models.Model):
    class Meta():
        index_together = [['last_name']]
    first_name = models.CharField()
    last_name = models.CharField()


现在makemigrations确实进行了新的迁移:

./manage.py makemigrations app-name

>>Migrations for 'app-name':
>>  0005_auto_20140929_1540.py:
>>    - Alter index_together for Person (1 constraint(s))


相应的sql命令实际上是CREATE INDEX

./manage.py sqlmigrate app-name 0005_auto_20140929_1540

>>BEGIN;
>>CREATE INDEX app-name_person_last_name_7...4_idx ON `app-name_person` (`last_name`);
>>COMMIT;

关于django - 通过迁移将索引添加到Django中的模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26109184/

相关文章:

python - @staff_member_required 正在抛出 "object has no attribute ' 用户'”

Django 没有设置 MySQL ON DELETE = CASCADE

javascript - Django admin 添加 View 弹出对话框

python - 对数据库进行更改后重新评估 django 查询

python -/opt/local/lib/node_modules/less/bin/lessc : not found - Django Error

python - 使用 kwargs 的 Django 成功 url

python - 使用 Ajax 按钮过滤 Django 模型

Django:如何从模板中包含 View

mysql - SQL 中 bool 型与整数的最佳实践

django-models - 如何在管理页面中显示模型的所有字段?