Django - syncdb不会创建表

时间:2012-12-24 01:18:23

标签: python 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也不会返回任何错误。有谁知道这可能是什么问题?还是更好的诊断?

2 个答案:

答案 0 :(得分:15)

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

这给你留下了一些选择。

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

答案 1 :(得分:5)

我在django docs中找到了这个解释:SchemaEvolution

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

它并不完美,但它的效果非常好。在运行迁移文件之前,应始终检查(并在必要时进行编辑),以确保它实际执行了它应该执行的操作。 您可以查看他们的教程here

另外,如果您运行:

python manage.py inspectdb > somefile.txt

如果您的数据库结构与您的django模型匹配,您可以快速查看。