gpt4 book ai didi

python - 将 'through' 用于 ManyToMany 字段时如何向南迁移?

转载 作者:太空狗 更新时间:2023-10-30 00:51:53 24 4
gpt4 key购买 nike

我想在 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 进行数据库迁移。不幸的是,在这种情况下,south 建议删除现有的 app_b_a 表并重新创建一个新的 app_c

有没有办法告诉 south 不要重新创建 m2m 表?

最佳答案

我会尝试按以下方式进行:

  1. 添加 C 模型,但不要向其添加任何额外的数据字段。只需将 2 个 FK 设置为链接模型,这样它的模式实际上与默认的 m2m 表相同,除了表名。
  2. 为您的应用运行 schemamigration --auto
  3. 要在不移动数据的情况下有效地“删除”现有表并“创建”新表,只需删除所有从forwards/backwards 方法生成的迁移代码和添加:转发: db.rename_table('yourappname_m2mtablename', 'yourappname_c')向后: db.rename_table('yourappname_c', 'yourappname_m2mtablename')
  4. 让“卡住”的模型保持原样!
  5. 现在您可以扩展您的 C 模型并为其生成一个新的 schemamigration。

关于python - 将 'through' 用于 ManyToMany 字段时如何向南迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7878605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com