我目前有一个托管应用的网站,并拥有一个用户数据库。现在我想连接这两个,以便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”对象混淆)。我完成了创建添加此外键的步骤,它工作正常。我唯一的结论是它必须是一个南迁移问题,而且我的代码实际上没有任何问题。
答案 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