【发布时间】:2018-10-15 23:51:48
【问题描述】:
我有一个如下所示的 Django 模型:
class Foobar(models.Model):
baz = models.CharField(max_length=12, default=some_func)
some_func存在于文件/someproj/utils/utils.py中
这很好,一切都很好。我为此模型创建了迁移并按预期工作。迁移大致如下:
from __future__ import unicode_literals
from django.db import migrations, models
import someproj.utils.utils
class Migration(migrations.Migration):
dependencies = [("someproj", "0008_auto_20180928_0002")]
operations = [
migrations.CreateModel(
name="Foobar",
fields=[
(
"baz",
models.CharField(
default=someproj.utils.utils.some_func,
max_length=12,
serialize=False,
),
),
],
)
]
后来我意识到我想将some_func 重命名为其他名称。我在 utils.py 中重命名了函数,当然现在迁移失败了,因为 some_func 不再存在。如果我手动修改迁移可行,但向我解释的经验法则是您(几乎)永远不要手动编辑迁移。
有什么方法可以适应这种变化?您是否必须手动编辑迁移?如果我必须运行旧版本的代码(例如,我必须在重命名之前的某个时间点签出以前的提交),那会不会有问题?
【问题讨论】:
-
运行
python manage.py makemigrations,这将重建你的模型。 -
您的
models中是否已有需要保存的信息? -
@CarlBrubaker 我没有,这是我最终利用的:我删除了这个迁移并重新创建了它,从数据库中转储了所有内容。不过,这显然不是一个可持续的策略,所以我想学习处理这种情况的最佳实践。
-
@wanderer0810 我确实运行了 makemigrations,这是由于
some_func不再存在而导致的错误。 -
您可以进行双重迁移:1 删除字段,然后再次添加。或者您可能必须编写一些方法来查找所有设置了 some_func 的对象并将其更改为其他内容。
标签: python django django-migrations