Django - syncdb不会创建表

Rob*_*Rob 8 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
Run Code Online (Sandbox Code Playgroud)

运行sql myapp使用新表打印正确的语句,但这在运行时不会反映出来syncdb.validate也没有返回任何错误.有谁知道这可能是什么问题?还是更好的诊断?

Ala*_*air 15

syncdb命令不会按设计为现有模型创建多对多的表.这个决定在机票2229上解释.

这给你留下了一些选择.

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


edu*_*222 5

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

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

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

另外,如果您运行:

python manage.py inspectdb > somefile.txt
Run Code Online (Sandbox Code Playgroud)

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