Postgres Django上的Dotcloud数据库错误

时间:2012-11-28 17:57:13

标签: django postgresql dotcloud

我正在使用Dotcloud部署我的django应用程序。 我使用Postgres作为DB。

我有一个新的模型到我的应用程序,我想刷新和syncdb数据库。当我这样做时,一切都能找到。我的新模型“竞赛”出现在我的管理员中。

问题在于,其他模型Match与模型竞赛有一个ForeignKey。当我在管理员中找到“匹配”时,我收到此错误:

     DatabaseError at /admin/myproject/match/
     column myproject_match.competition_id does not exist
     LINE 1: ...team_challenger_id", "sportdub_match"."sport_id", "sportdub_...

有关syncdb无法使其工作的任何想法吗?

感谢您的帮助。

编辑:我的两个模特

     class Competition(models.Model):
       name = models.CharField(max_length=256)
       comp_pic = models.ImageField(upload_to="comp_pics/")

       def __unicode__(self):
           return self.name


     class Match(models.Model):
        team_host = models.ForeignKey(Team, related_name='host_matches')
        team_challenger = models.ForeignKey(Team, related_name= 'challenger_matches')
        sport = models.ForeignKey(Sport)
        competition = models.ForeignKey(Competition)

1 个答案:

答案 0 :(得分:1)

manage.py syncdb只会创建缺少的表。如果表已存在,但定义无效,则不会更新。这很可能是您遇到的问题。

至少有三种方法可以解决这个问题。

  1. 简单方法:使用manage.py reset有效地删除+重新创建所有表格。很容易,但当然你会丢失数据。
  2. 懒惰方式:安装django_extensions并使用manage.py sqldiff。它将向您显示数据库的当前结构与预期结构之间的差异。 sqldiff将很好地向您展示可以更新现有数据库以符合您的模型的SQL语句。然后,您可以在SQL shell中执行这些语句。
  3. 干净的方式:使用像south这样的迁移框架来处理数据库架构更新。当然,如果您处于开发的早期阶段,那就太过分了(在您进行本地开发时,每次添加/更改/删除字段时都不想编写数据库迁移!)但是如果您的项目有更长的时间寿命,我绝对建议您查看south