gpt4 book ai didi

python - Django:将 ManyToManyField 转换为 ForeignKey

转载 作者:太空狗 更新时间:2023-10-30 01:49:10 25 4
gpt4 key购买 nike

假设我创建了两个模型:

class Car(models.Model):
name = models.CharField(max_length=50)
size = models.IntegerField()


class Manufacturer(models.Model):
name = models.CharField(max_length=50)
country = models.CharField(max_length=50)
car = models.ManyToManyField(Car)

我为两个模型都添加了条目,然后我意识到每辆汽车只与一个唯一的制造商相关。所以,我应该将 ManyToManyField 转换为 ForeignKey:

class Car(models.Model):
name = models.CharField(max_length=50)
size = models.IntegerField()
manufacturer = models.ForeignKey(Manufacturer)

class Manufacturer(models.Model):
name = models.CharField(max_length=50)
country = models.CharField(max_length=50)

我怎样才能在不丢失我的条目的情况下做到这一点?我试图查看 South 文档,但没有找到这种转换方式...

最佳答案

这很重要,我认为您将需要三个迁移:

  1. 添加 ForeignKey
  2. ManyToMany 转换为 ForeignKey(使用 forwards 方法)。
  3. 删除 ManyToMany

您可以将 1 和 2 或 2 和 3 合并在一起,但我不推荐这样做。
此外,您还应该为 2 实现 backwards 方法。

2. 的 forwards 的一个例子是:

class Migration(SchemaMigration):
def forwards(self, orm):
for manufacturer in orm.Manufacturer.objects.all():
for car in manufacturer.car.all():
car.manufacturer = manufacturer
car.save()

请注意:

  • 这里还没有backwards方法。
  • 这需要进行广泛的测试:迁移是您应该格外小心的事情。
  • 如果一辆汽车有两个制造商,将保留最后一个。
  • 这是非常低效的,我们对每个制造商的每辆车进行一次查询!

您还需要在步骤 2./3 中更新使用这些关系的代码。

关于python - Django:将 ManyToManyField 转换为 ForeignKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13953838/

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