2012-07-03 27 views
3

所以这就是情况:我添加一个新的列(演示者)到我的事件表。我跑了alter table sql语句,跑了python manage.py syncdb。我试图能够选择多个配置文件并将它们存储为演示者。这是为什么发生?DatabaseError没有这样的表与ManyToManyField

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() 
+3

我认为你的答案是[这里](HTTP:/ /stackoverflow.com/questions/3989717/django-adding-a-manytomany-field-table-to-existing-schema-related-name-error)基本上,syncdb会将M2M字段变成桥表,因为您的表已创建syncdb将不会使你的应用程序期望的桥表,因此错误,解决方案使用南或手动使表作为syncdb将 –

+1

@TomIngram:不妨使该评论回答r,因为它*是答案。 –

+0

谢谢你的帮助。我假设你可以“删除”现有的表格,然后用新列重新创建它? – Modelesq

回答

0

“没有这样的表”意味着您的数据库不包含您写的名称的表。

检查名称的写法是否与数据库中的名称完全相同(如果维护案例,效果会更好)。 如果名称正确,请在表名的前面设置您在其中创建表的数据库模式的名称,例如my_schema.my_table。

5

您已将ManyToMany字段添加到现有表,syncdb不会检测到该表。似乎是django对我的一部分缺陷,但我认为它很小。生成表最简单的方法将是运行

./manage.py sql events 

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

./manage.py dbshell 
+1

最有帮助的Django提示我遇到了一段时间!谢谢... – Erve1879

相关问题