Django 为什么南方决定删除这个m2m表?

Django 为什么南方决定删除这个m2m表?,django,django-south,Django,Django South,我想在现有模型中添加一列,在运行“schemamigration--auto”之后,生成的迁移尝试删除另一个表!为什么会这样 我的模型(简化)- A类(型号): a=CharField() b=BooleanField(default=False)#关键字through=“C”告诉我们C模型将被用作关系表 链接到文档: 关于through关键字的其他SO问题:在创建m2m B_d的同时/之后,您是否也添加了through模型?在没有看到更多代码的情况下很难确定,但看起来South正在放弃自动联接

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

我的模型(简化)-

A类(型号):
a=CharField()
b=BooleanField(default=False)#关键字
through=“C”
告诉我们
C
模型将被用作关系表

链接到文档:


关于through关键字的其他SO问题:

在创建m2m B_d的同时/之后,您是否也添加了through模型?在没有看到更多代码的情况下很难确定,但看起来South正在放弃自动联接表,因为现在有一个指定的“直通”模型将用于联接。我还假设模型C确实存在:o)

C确实存在:)我自己没有添加“通过”,但看起来我的一个同事自己添加了它并删除了m2m表(没有使用South),所以(很久以后)当我添加了一列并创建了自动迁移South时,我尝试删除该表。我想知道我新增的专栏是如何引发这一切的,Doh!啊。很高兴你查到了真相。我猜您知道,您可以应用您使用--fake选项进行的特定迁移,这样您就可以有一组迁移,让您可以为测试/新部署复制数据库的状态,而不必重复您的同事所做的手动数据库更改。但万一你不知道,我想我应该提一下。
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)