为什么South决定删除这个m2m表?

时间:2011-02-13 17:58:50

标签: django django-south

我想在现有模型中添加一个列,在运行“schemamigration --auto”之后,生成的迁移会尝试删除另一个表!为什么会这样做?

我的模型(简化) -

class A(Model):
    a = CharField()
    b = BooleanField(default=False)   #  <--- this is the new column

class B(Model):                # <---- this is the table South wants to delete
    c = CharField()
    d = ManyToManyField(A, through='C')

结果迁移 -

def forwards(self, orm):
    # Removing M2M table for field d on 'B'
    db.delete_table('B_d')  # <-------  Why is that?
    # Adding field 'b'
    db.add_column('A', 'b', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True), keep_default=False)

2 个答案:

答案 0 :(得分:1)

through="C"关键字表示C模型将用作关系表。

文档链接:EXTRA FIELDS ON MANY-TO-MANY RELATIONSHIPS

关于直通关键字的其他问题:adding the same object twice to a ManyToManyField

答案 1 :(得分:1)

您是否也在创建m2m B_d的同时添加了直通模型?很难确定没有看到更多的代码,但看起来南方正在抛弃自动连接表,因为现在有一个指定的“通过”模型将用于连接。我也假设模型C确实存在:o)