我有一个像这样的Django ORM模型:
class Foo(models.Model):
data = models.CharField(null=True, blank=True)
bar_id = models.IntegerField(null=True, blank=True)
bar_data = models.CharField(null=True, blank=True)
我想将bar_id
和bar_data
分解为单独的模型类:
class Foo(models.Model):
data = models.CharField(null=True, blank=True)
bar = models.ForeignKey('Bar', null=True, blank=True)
class Bar(models.Model):
id = models.IntegerField(primary_key=True)
data = models.CharField(null=True, blank=True)
我已经确定每个bar_id
只有一个与bar_data
相关联的值,而bar_data
始终是None
,如果bar_id
是None
,因此应该可以将旧的bar_data
字段迁移到新的Bar
对象中,我只是不知道该怎么做。
我可以在保留数据的同时迁移到这些新模型吗?
答案 0 :(得分:4)
正确的django-ish方法是:
Bar
)创建架构迁移(https://docs.djangoproject.com/en/1.11/topics/migrations/) - 此迁移应该只添加Bar
而不添加任何实例Foo
个实例并根据您的要求创建Bar
个实例。如果确实需要,您还可以尝试创建向后数据迁移(即循环所有Bar
实例并正确更新Foo
实例)以进行此数据迁移。请注意,在此迁移过程中,您将Foo
和Bar
以及bar_id
中的bar_data
和Foo
字段。bar_id
删除(删除)不需要的字段(bar_data
和Foo
)。正如我所说,这是正确的,django-ish方式。但是,如果你想要快速和脏的东西,你可以使用postgresql(使用PL / pgsql)查看我的文章,在数据库中进行这样的更改:https://spapas.github.io/2017/07/04/postgresql-auto-create-category-column/