1

我目前有一个托管应用程序并拥有用户数据库的网站。现在我想将两者连接起来,这样应用程序就可以拥有作者(即用户)

更新:下面添加了更多相关细节,我正在使用 django-registration。

在此以及 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 访问我的应用程序时,我在 /admin/apps/app/ 处收到错误 DatabaseError ...没有这样的列:apps_app.author_id

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

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

./manage.py schemamigration apps --auto

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

./manage.py migrate apps

这没有用,所以我做了

./manage.py migrate apps --fake

然后再上一个命令,没有--fake。

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

更新 2我刚刚创建了一个新的 django 应用程序(.manage.py startapp...不要与我的“应用程序”对象混淆)。我完成了创建添加此外键的步骤,并且效果很好。我唯一的结论是,这一定是南迁移问题,实际上我的代码没有任何问题。

4

2 回答 2

1

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

因为,由于某种原因,South 没有“看到”需要将作者列添加到应用程序表中,所以有一个带有--add-field标志的手动模式迁移选项。

我做了:

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

然后

./manage.py migrate apps

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

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

000x迁移号在哪里。你可以从第一步的输出中得到这个。

然后重新启动,它应该是固定的。我一遍又一遍地这样做,并发现当我最具体地使用 South 时,我获得了最大的成功。我建议每次都指定迁移编号。迁移编号带有特定更改的指示,应直接应用数据库转换。

于 2012-10-04T19:53:40.560 回答
0

./manage.py 迁移应用

这没有用,所以我做了

你的意思是它没有工作?你收到什么错误?

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

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

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

于 2012-10-04T16:35:06.730 回答