Django 为什么南方决定删除这个m2m表?
我想在现有模型中添加一列,在运行“schemamigration--auto”之后,生成的迁移尝试删除另一个表!为什么会这样 我的模型(简化)-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正在放弃自动联接
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)