2012-12-24 103 views
8

我在现有模型中添加了多对多字段,并期望syncdb可以创建新表格,但这里没有任何内容。这是模型的样子:Django - syncdb不会创建表格

class Author(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    email = models.EmailField() 

    def __unicode__(self): 
     return "{0} {1}".format(self.first_name, self.last_name) 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    authors = models.ManyToManyField(Author) 

    def __unicode__(self): 
     return self.title 

运行sql myapp打印正确的语句与新表,但是当我运行syncdb这没有体现出来。 validate也不返回错误。有人知道这里可能是什么吗?还是更好的诊断?

回答

15

syncdb命令不会根据设计为现有模型创建多对多表。该决定在ticket 2229中解释。

这给你留下了几个选择。

  • 如果您的Book模型中没有任何数据,请删除表并重新运行syncdb。 Django将重新创建书桌和许多表格。
  • 使用dbshel​​l命令,并使用sql myapp的输出创建多对多连接表。
  • 如果您使用Django进行多模式迁移,请与South交朋友。
5

我在django文档中找到了这个解释很有用:SchemaEvolution

数据库迁移的事实标准是Django South。

它不完美,但它工作得很好。在运行之前,您应该始终检查(并在必要时编辑)您的迁移文件,以确保它实际上完成了它应该做的事情。 你可以看看他们的教程here

此外,如果您运行:

python manage.py inspectdb > somefile.txt 

,您可以快速检查出,如果你的数据库结构是匹配您的Django模型。