2

我刚刚使用 PIP 安装了 django-mptt(意味着我有 0.5.5),将现有模型(“评论”)更改为 MPTTModel 的子类,并尝试使用 South 进行模式迁移,但 South 给了我以下错误消息:

'Comment.lft' 字段没有指定默认值,但不是 NULL。由于您要添加此字段,因此您必须指定用于现有行的默认值。你是否想要:

  1. 现在退出,并在 models.py 中为字段添加默认值
  2. 现在指定一个一次性值用于现有列

请选择一个选项:

此线程中,开发人员似乎建议告诉 South 使用“0”,但随后其他人建议这样做会产生另一个问题。如果有人能说明我可能做错了什么,或者我应该如何回应,我将不胜感激。

4

1 回答 1

1

正如 Victor 建议的那样,在出现提示时将“无”设置为默认值是正确的做法。但是,迁移后可能还需要在模型上使用rebuild() 方法。我还发布到 django-mptt-dev Google Group,包作者 Craig de Stigter 回复了以下内容:

如果您的迁移导入了实际模型(不是南 ORM 模型)并在迁移结束时执行 YourModel.objects.rebuild() ,它应该正确迁移。同时,您用于 mptt 字段的实际值是无关紧要的,因为rebuild() 将覆盖它。

当 South 要求我设置默认值时,我请他澄清他是否说我可以指定“None”,然后转到 shell 并使用rebuild(),他说是的。

无论如何,它似乎对我有用。

于 2013-08-02T22:43:25.833 回答