我需要将以下Django模型中的一些属性外包出去:
class TextResult(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
text = models.ForeignKey(Text)
# following fields will be in the referenced model
wpm = models.FloatField(default=0.0)
accuracy = models.FloatField(default=1.0,
validators=[MinValueValidator(0.0),
MaxValueValidator(1.0)])
引用一个引用特定数据的模型:
class TextResult(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
text = models.ForeignKey(Text)
typing_result = models.ForeignKey(TypingResult)
class TypingResult(models.Model):
wpm = models.FloatField(default=0.0)
accuracy = models.FloatField(default=1.0,
validators=[MinValueValidator(0.0),
MaxValueValidator(1.0)])
问题是,数据库中已经存在一些数据,所以我必须将数据迁移到新结构,实现这一目标的最简单,最简洁的方法是什么?
答案 0 :(得分:1)
我会做三步迁移。
1.1。创建TypingResult
模型和typing_result = models.ForeignKey(TypingResult, blank=True, null=True)
字段。确保FK是可选的,使其可空白且无效
1.2迁移检查点
2.1使用本指南https://docs.djangoproject.com/en/1.11/topics/migrations/#data-migrations创建一个空迁移,并添加数据迁移说明。
2.2数据迁移步骤如下:
遍历所有TextResult
,为每个人创建一个带有相应数据的TypingResult
将TypingResult
链接到TextResult
到FK
2.3运行迁移到检查点
3.1删除TextResult
上的wpm和准确性字段,并使ForeignKey不可选。
3.2运行迁移
<强>结论强>
这可能都是一步完成,但最好能够了解正在发生的事情。在.save()
调用之前添加pdb将允许您检查数据迁移的步骤
import pdb; pdb.set_trace()