django将ManyToMany字段/表添加到现有模式,related_name错误

ric*_*ich 8 django many-to-many field

我有一个模型(用户和书籍)的现有项目.我想在现有模型Books中添加ManyToMany(M2M)字段,但syncbb命令不会这样做.

详细信息:图书已经有一个映射到用户的FK字段,我想添加一个也映射到用户的新M2M字段(阅读器).如你所知,Django的syncdb只关心表,所以添加一个普通字段很容易,但是M2M需要一个新的连接表(app_books_user),所以不应该像任何其他新表那样使用syncdb cmd添加它吗?它为Book的'卖家'领域创建了我的另一个联合表.

当我运行syncdb时,我最初收到一条错误,指示我使用'related_name'参数来帮助区分对User的两个引用.我加了那些.但是,当我再次运行syncdb时,它不会创建新的连接表(但它现在没有错误).当我通过Shell查看它时存在新字段,但是不能使用它b/c连接表不存在.我通过'sqlall'cmd查看了sql代码,它打印出新表的SQL,但它没有被执行.

我错过了什么?我应该通过我的数据库浏览器强制SQL(来自sqlall)吗?这有什么影响吗?代码如下:

Models.py

from django.contrib.auth.models import User

class Seller(models.Model):
    ...

class Books(models.Model):

    name=models.CharField(max_length=50)
    author=models.ForeignKey(User, related_name='creator')
    readers=models.ManyToManyField(User, blank=True, related_name='viewers')
    sellers=models.ManyToManyField(Seller)
Run Code Online (Sandbox Code Playgroud)

谢谢

rz.*_*rz. 6

syncdb不会修改现有表(模型).发生的事情是,即使添加M2M不修改表(它应该只添加连接表),syncdb也不会创建新表,因为它看到模型已经在数据库中并且它正在跳过它.请参阅syncdb文档

[syncdb]为尚未创建表的INSTALLED_APPS中的所有应用程序创建数据库表.

这有点令人困惑,因为从技术上讲这个表还没有创建,但行为很有意义"这个模型的表是否已创建?是的!然后不要同步它."

通常,django不提供迁移数据库模式的机制(即添加列等).所以,你必须通过原始SQL或使用第三方工具来做这种事情.我强烈建议退房南方.