删除课程后,django makemigrations失败

时间:2017-03-16 13:50:18

标签: python django python-3.x django-migrations

我有一个这样的模型:

class States(Enum):
    first = 'one'
    second = 'two'

choices = (
    (States.first, 'First'),
    ...
)

class MyModel(models.Model):
    state = FSMField(choices=choices)

和另一个模型如:

class MyOtherModel(models.Model):
    new_state = CharField(choices=myapp.choices)

出于各种原因,我删除了States Enum并将其替换为一堆常量,如:

FIRST = 'one'

然后我迁移了我的数据库,一切都很顺利。 但是当我后来运行./manage.py makemigrations时,我得到一个`AttributeError:module' myapp.models'没有属性'状态'。

追溯结束如下:

File "myapp/migrations/0038_xxx.py", line 12, in <module>
    class Migration(migrations.Migration):
  File "myapp/migrations/0038_xxx.py", line 36, in Migration
    ('new_state', models.SmallIntegerField(choices=[(myapp.models.States('one'), 'First'), (myapp.models.States('two'), 'Second')])),
AttributeError: module 'myapp.models' has no attribute 'States'

但如果我将States定义粘贴回我的models文件,则makemigrations运行正常。

如果旧的迁移仍然需要,我该如何删除此代码?我有一堆跟随此0038的迁移,其中大部分都已应用于生产数据库。

2 个答案:

答案 0 :(得分:0)

要删除此旧枚举的引荐,您可以使用搜索和替换在迁移中修改<?php $conn = mysqli_connect('localhost','username','password','database'); if (!$conn) { die("Connection failed: ".mysqli_connect_error()); } {。}}。

答案 1 :(得分:-1)

您是否也改变了您的选择元组以使用这样的新常量?

choices = (
(FIRST, 'First'),
...
)