[英]Migrate from one django model to two models referenced with a foreign key
我需要將以下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)])
問題是數據庫中已經有一些數據,因此我必須將數據遷移到新結構中,最簡單,最干凈的方法是什么?
我將進行三步遷移。
1.1。 創建TypingResult
模型,然后創建TypingResult
typing_result = models.ForeignKey(TypingResult, blank=True, null=True)
字段。 通過將FK設置為空白和可空來確保FK是可選的
1.2遷移檢查點
2.1使用本指南https://docs.djangoproject.com/zh-CN/1.11/topics/migrations/#data-migrations創建一個空遷移,並添加有關數據遷移的說明。
2.2數據遷移步驟如下:
遍歷所有TextResult
,為它們每個創建一個帶有相應數據的TypingResult
通過FK將TextResult
鏈接到TypingResult
2.3運行遷移到檢查點
3.1刪除TextResult
上的wpm和TextResult
字段,並使ForeignKey為非可選。
3.2運行遷移
結論
這大概可以一步完成,但是最好了解發生了什么。 此外,在.save()
調用之前添加pdb將使您能夠檢查數據遷移的步驟
import pdb; pdb.set_trace()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.