我正在使用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)
答案 0 :(得分:1)
manage.py syncdb
只会创建缺少的表。如果表已存在,但定义无效,则不会更新。这很可能是您遇到的问题。
至少有三种方法可以解决这个问题。
manage.py reset
有效地删除+重新创建所有表格。很容易,但当然你会丢失数据。django_extensions
并使用manage.py sqldiff
。它将向您显示数据库的当前结构与预期结构之间的差异。 sqldiff
将很好地向您展示可以更新现有数据库以符合您的模型的SQL语句。然后,您可以在SQL shell中执行这些语句。south
这样的迁移框架来处理数据库架构更新。当然,如果您处于开发的早期阶段,那就太过分了(在您进行本地开发时,每次添加/更改/删除字段时都不想编写数据库迁移!)但是如果您的项目有更长的时间寿命,我绝对建议您查看south
。