对于ManyToMany字段使用'through'时如何向南迁移?

luc*_*luc 5 python django django-south

我想在django应用程序中更改ManyToMany字段.

我有以下型号:

class A:
    ...

class B:
    as = models.ManyToManyField(A)
Run Code Online (Sandbox Code Playgroud)

而且我要:

class A:
    ...

class C:
     a = models.ForeignKey(A)
     b = models.ForeignKey("B")
     extra_data = models.BooleanField(default=False)

class B:
    as = models.ManyToManyField(A, through=C)
Run Code Online (Sandbox Code Playgroud)

我正在使用南进行数据库迁移.不幸的是,在这种情况下,南方建议删除现有的app_b_a表并重新创建一个新表app_c.

有没有办法说南方不要重新创建m2m表?

Bot*_*res 6

我会尝试以下方式:

  1. 添加C模型但添加任何额外的数据字段.只需将2个FK设置为​​链接模型,这样它的模式实际上与默认的m2m表相同,但表名除外.
  2. schemamigration --auto为您的应用运行.
  3. 要有效地"删除"现有表并"创建"新表,而不移动数据,只需从forwards/ backwardsmethods中删除所有生成的迁移代码并添加: forward: db.rename_table('yourappname_m2mtablename', 'yourappname_c') 向后: db.rename_table('yourappname_c', 'yourappname_m2mtablename')
  4. 保持"冷冻"型号的字样!
  5. 现在,您可以扩展C模型并为其生成新的模式迁移.