0

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

我的应用程序有一个新模型,我想刷新和同步数据库。当我这样做时,一切正常。我的新模型,名为“竞争”出现在我的管理员中。

问题是另一个模型 Match 与模型 Competition 有一个 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)
4

1 回答 1

1

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

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

  1. 最简单的方法:用于manage.py reset有效地删除+重新创建所有表。很简单,但是您当然会丢失数据。
  2. 懒惰的方式:安装django_extensions和使用manage.py sqldiff. 它将向您展示数据库的当前结构与预期结构之间的差异。sqldiff将很好地向您展示可以更新现有数据库以符合您的模型的 SQL 语句。然后,您可以在 SQL shell 中执行这些语句。
  3. 干净的方法:使用迁移框架south来处理数据库模式更新。当然,如果您处于开发的早期阶段,这是大材小用的(您不想在进行本地开发时每次添加/更改/删除字段时都编写数据库迁移!)但是如果您的项目需要更长的时间寿命,我绝对建议检查一下south
于 2012-11-28T19:09:34.233 回答