我正在使用django构建应用程序,并使用django-south进行数据库模式迁移。我正在使用django-mptt构建一个评论系统,我安装了0.5-pre(当前的git master分支)。
我正在使用的版本有一个名为TreeForeignKey
的django字段,但我正在尝试测试0.5是否存在0.4中存在的错误,所以我删除了我的django-mptt版本安装了cheeseshop的当前版本。我修改了代码以使用ForeignKey
而不是TreeForeignKey
。
当需要进行迁移时,它显然会打破这条消息:
ValueError: Cannot import the required field 'mptt.fields.TreeForeignKey'
我的所有迁移文件都引用了mptt.fields.TreeForeignKey
,这在django-mptt 0.4中不存在。
我的Comment
模型在django-mptt 0.5中:
from mptt.models import MPTTModel
from mptt.fields import TreeForeignKey
class Comment(MPTTModel):
# ...
parent = TreeForeignKey('self', related_name='children', blank=True, null=True)
我降级到django-mptt 0.4后的同一模型
import django.db.models
from mptt.models import MPTTModel
class Comment(MPTTModel):
# ... cruft
# TreeForeignKey does not exist in mptt 0.5!
parent = models.ForeignKey('self', related_name='children', blank=True, null=True)
我想出了两种相当黑客的方法来解决这个问题并允许迁移工作:
TreeForeignKey
课程添加到我的django-mptt install。mptt.fields.TreeForeignKey
。我采用了第一种方法并且它有效,但我觉得这有点像黑客(但没有第二种选择那么多)。
是否有一种非hacky方式来做降级依赖项所做的事情,导致我的模型中的某些字段发生变化?
答案 0 :(得分:2)
这与南方无关。在0.5.pre之前,django-mptt的fields
模块不存在。所以当你降级到0.4时,你现在正确地得到了一个ImportError。
我无法告诉你使用的正确导入是什么,因为我没有运行0.4并且出于某种疯狂的原因,开发人员没有维护0.4文档。但是,您的第二种方法似乎最合适。在迁移中不应该有任何理由需要实际使用TreeForeignKey。它只是标准ForeignKey的包装。