Django south migration外键

2024-05-01 05:11:33 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个给定的模型:

class FooBar(models.Model):
    foo = models.ForeignKey(Foo,null=True,blank=True)
    bar = models.ForeignKey(Bar,null=True,blank=True)
    foo_flag = models.BooleanField(default=False)
    bar_flag = models.BooleanField(default=False)

其中的逻辑是始终存在Foo或{}的外键,而不是都是。但是现在逻辑已经改变了,总是有一个Foo外键,有时还有一个Bar。所以我的新模型看起来是这样的:

^{pr2}$

现在是复杂的部分。Bar模型如下所示:

class Bar(models.Model):
    foo = models.ForeignKey(Foo)

因此,对于数据库中以前存在的每个项,其中foo字段是null,因此有一个Bar的外键,我需要foo字段来获取同一个{}对象的外键,该对象具有{}字段对象的外键。以下是逻辑:

  1. 删除FooBar.foo_flag
  2. 使用中的Foo对象填充所有空的foo外键 Bar外键
  3. foo字段中不再允许null

我该怎么写这个迁移呢?


Tags: 对象模型truemodelfoomodelsbar逻辑
1条回答
网友
1楼 · 发布于 2024-05-01 05:11:33

针对这种情况的最佳做法是进行3次独立迁移:

  1. 数据迁移,迭代所有FooBar项并填充适当的值。在
  2. 模式迁移,您可以在其中为foreignkey设置NOT NULL约束。South将为不受欢迎的项目请求“默认”值。在大多数情况下,你不应该有那些项目,但是如果出了问题,你需要容易检测到的值,所以你应该让Foo项,并将其id设置为默认值。在
  3. 模式迁移,删除FooBar.foo\u标志

迁移之后,我建议检查fakeFoo对象链接的表,并在出现问题时手动修复数据。在

相关问题 更多 >