Python 如何将Django模型字段分解到它们自己的模型中,保留数据?
我有一个Django ORM模型,如下所示:Python 如何将Django模型字段分解到它们自己的模型中,保留数据?,python,django,django-orm,Python,Django,Django Orm,我有一个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\u id和bar\u数据分解成一个单独的模型类: class
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\u id
和bar\u数据
分解成一个单独的模型类:
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\u id
只有一个与之关联的bar\u数据的值,如果bar\u id
为None
,则bar\u数据总是None
,因此应该可以将旧的bar\u数据
字段迁移到新的bar
对象中,我只是不知道怎么做
我可以在保留数据的同时迁移到这些新模型吗?正确的django-ish方法是:
- 使用新模型(
Bar
)创建架构迁移()-此迁移应只添加Bar
,而不添加任何实例
- 创建将数据从旧模型复制到新模型的数据迁移()。您只需循环所有
Foo
实例,并根据您的需求创建Bar
实例。如果确实需要,您还可以尝试为此数据迁移创建向后数据迁移(即循环所有Bar
实例并正确更新Foo
实例)。请记住,在运行此迁移时,Foo
和Bar
以及Bar\u-id
和Bar\u-data
字段都位于Foo
中
- 创建第二个架构迁移,该迁移将从
Foo
中删除(删除)不需要的字段(bar\u id
和bar\u data
)
正如我所说,这是正确的,django式的方法。但是,如果您想要快速而肮脏的东西,您可以查看我的文章,仅使用postgresql(使用PL/pgsql)在数据库中进行此类更改:正确的django-ish方法是:
- 使用新模型(
Bar
)创建架构迁移()-此迁移应只添加Bar
,而不添加任何实例
- 创建将数据从旧模型复制到新模型的数据迁移()。您只需循环所有
Foo
实例,并根据您的需求创建Bar
实例。如果确实需要,您还可以尝试为此数据迁移创建向后数据迁移(即循环所有Bar
实例并正确更新Foo
实例)。请记住,在运行此迁移时,Foo
和Bar
以及Bar\u-id
和Bar\u-data
字段都位于Foo
中
- 创建第二个架构迁移,该迁移将从
Foo
中删除(删除)不需要的字段(bar\u id
和bar\u data
)
正如我所说,这是正确的,django式的方法。但是,如果您想要快速而肮脏的东西,您可以查看我的文章,仅使用postgresql(使用PL/pgsql)在数据库中进行此类更改: