django为外键给出了神秘的错误

时间:2016-01-22 01:56:00

标签: python django

我收到django模型的错误:

ProgrammingError at /admin/notifications/eventtoken/ column notifications_eventtoken.user_id does not exist LINE 1: ...ications_eventtoken" INNER JOIN "users_user" ON ( "notificat... ^ HINT: Perhaps you meant to reference the column "notifications_eventtoken.used_at".

我为这样的用户添加了一个外键:

class EventToken(models.Model):
    token = models.CharField(max_length=255, db_index=True)
    user = models.ForeignKey(User, null=False, blank=False)
    used_at = models.DateTimeField(null=True, blank=True)
    event = models.ForeignKey(Event)

当我删除用户字段时它会起作用,但是否则会中断,我无法从错误消息中说出来。

1 个答案:

答案 0 :(得分:2)

  

删除用户字段时可以使用。

这是因为您的数据库缺少您在EventToken类中编程的列,我猜测它在notifications/models.py内。这就是它被称为ProgrammingError

的原因

有几种方法可以解决这个问题:

1。删除整个数据库并重新同步!不推荐用于生产的任何东西,但测试项目确实不会造成太大的伤害。

2。使用southdjango migrate app等工具(取决于您正在使用的django版本)自动将表格添加到数据库中manage.py脚本。编辑:这个解决方案是最可行的,因为它可以在跨多个开发环境工作时快速遵循DRY原则。

3a。使用命令行工具手动进入数据库并添加缺少的列。如果我没有说清楚......你说'#34;我想保存user_id"这张表中的外键"当你的桌子回来时,#34;没有地方可以保存这个ID。" ......)

3b。使用数据库GUI(如PGadmin for postgresql)并将user_id列添加到notifications_eventtoken数据库表中。

4. 删除EventToken类中的用户字段!不要这样做,但要理解它是有效的,因为它可以清除逻辑差异。