【问题标题】:DatabaseError no such table with a ManyToManyFieldDatabaseError no such table with a ManyToManyField
【发布时间】:2012-07-03 20:59:27
【问题描述】:

所以情况是这样的:我正在向我的事件表中添加一个新列(演示者)。我运行了alter table sql 语句,运行了python manage.py syncdb。我试图能够选择许多配置文件并将它们存储为演示者。为什么会这样?

Exception Type:     DatabaseError
Exception Value:    no such table: events_event_presenters

class Event(models.Model):
    title = models.CharField(max_length=200)
    presenters = models.ManyToManyField(Profile, null=True, blank=True) #new column
    sub_heading = models.CharField(max_length=200)
    description = models.TextField()
    date = models.DateTimeField()

【问题讨论】:

  • 我认为您的答案是here 基本上syncdb 将M2M 字段转换为桥接表,因为您的表已经创建syncdb 不会使您的应用程序期望的桥接表因此错误,解决方案使用South 或手动使表像同步数据库一样
  • @TomIngram:不妨把这个评论作为答案,因为它答案。
  • 感谢您的帮助。我假设您可以 DROP 现有表并使用新列重新创建它?

标签: python django django-models


【解决方案1】:

您已将 ManyToMany 字段添加到现有表中,syncdb 不会检测到该字段。对我来说,这似乎是 django 的一个缺陷,但我想这是次要的。生成表的最简单方法是运行

./manage.py sql events

然后找到events_event_presenters 的定义并粘贴到您的数据库外壳中,通过

./manage.py dbshell

【讨论】:

    【解决方案2】:

    “没有这样的表”表示您的数据库不包含具有您编写的名称的表。

    检查名称是否与数据库中的完全一致(最好保持大小写)。 如果名称没问题,请将创建表的数据库模式的名称设置在表名之前,例如 my_schema.my_table。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      相关资源
      最近更新 更多