将ForeignKey添加到模型时的迁移问题

时间:2012-10-04 16:20:57

标签: python django foreign-keys django-south

我目前有一个托管应用的网站,并拥有一个用户数据库。现在我想连接这两个,以便Apps可以有作者(即用户)

更新:下面添加了一些更相关的详细信息,我正在使用django-registration。

Following this以及Django文档,我首先将author行添加到我的应用模型中:

from django.contrib.auth.models import User

class App(models.Model):
    name = models.CharField(max_length=200)
    ...
    author = models.ForeignKey(User)

然而,当我从django admin访问我的应用程序时,我收到错误 DatabaseError at / admin / apps / app / ...没有这样的列:apps_app.author_id

我需要为这个功能做更多的步骤,但我很好奇为什么这个简单的添加会引发错误。

我正在使用South进行迁移并运行

./manage.py schemamigration apps --auto

对于一次性值,我将其设置为“零”,因为它需要int()

./manage.py migrate apps

这没用,所以我做了

./manage.py migrate apps --fake

然后再次执行上一个命令,no --fake。

另外,根据链接的SO问题,我是否应该在apps / models.py中创建class User(User)

更新2 我刚创建了一个新的django应用(.manage.py startapp...,不要与我的“app”对象混淆)。我完成了创建添加此外键的步骤,它工作正常。我唯一的结论是它必须是一个南迁移问题,而且我的代码实际上没有任何问题。

2 个答案:

答案 0 :(得分:1)

我在我的本地和舞台上都试过这个,这是我能想到的最好的解决方案。

由于某些原因,南方没有“看到”需要将作者列添加到apps表中,因此存在带有--add-field标记的手动模式迁移选项。

我做了:

/manage.py schemamigration apps --add-field app.author

然后

./manage.py migrate apps

如果最后一个不起作用,请尝试

./manage.py migrate apps --fake 000x

其中000x是迁移号码。你可以从第一步的输出中得到这个。

然后重新启动它应该修复。我一直在做这件事,发现当我和南方最具体时,我获得了最大的成功。我建议每次都指定迁移号。迁移编号包含特定更改的指示,应直接应用数据库转换。

答案 1 :(得分:0)

  

./ manage.py迁移应用

     

这没用,所以我做了

你的意思是不起作用?你收到了什么错误?

对于类似情况,我通常使用null=True创建FK,运行此迁移,然后创建数据迁移,这将填充FK。

  

另外,根据链接的SO问题,我是否应该在apps / models.py中创建类User(用户)?

如果要将作者链接到django auth用户,请从django.contrib.auth.models导入。否则,是的,您需要一个User(或更好的Author)模型,它将继承django.db.models.Model而不是User