我想在Django应用中更改ManyToMany字段。

我有以下模型:

class A:
    ...

class B:
    as = models.ManyToManyField(A)

而且我要:
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)

我正在向南进行数据库迁移。不幸的是,在这种情况下,south prose删除了现有的app_b_a表并重新创建了一个新的app_c

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

最佳答案

我将尝试通过以下方式进行操作:

  • 添加C模型,但是不添加模型呢。只需将2个FK设置为​​链接模型,以使其架构实际上与默认的m2m表相同,但表名除外。
  • 为您的应用程序运行schemamigration --auto
  • 要有效地“删除”现有表并“创建”新表,而不移动数据,只需从forwards/backwards方法中删除所有生成的迁移代码,然后添加:
    转发: db.rename_table('yourappname_m2mtablename', 'yourappname_c') 向后: db.rename_table('yourappname_c', 'yourappname_m2mtablename')
  • 保持“卡住”模型的状态不变!
  • 现在,您可以扩展C模型并为其生成新的schemamigration。
  • 关于python - 在对ManyToMany字段使用 'through'时,如何向南迁移?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7878605/

    10-10 16:33