我已经有这样的模型:
class MyBase(models.Model):
field_a = models.IngetField()
field_b = models.IngetField()
class Class1(MyBase):
field_c = models.IngetField()
class Class2(MyBase):
field_c = models.IngetField()
这意味着并在每个Class1和Class2上自动增加mybase_ptr_id和field_c字段。
由于设计原因,我们希望将架构更改为:
class Class1(models.Model):
field_a = models.IngetField()
field_b = models.IngetField()
field_c = models.IngetField()
class Class2(models.Model):
field_a = models.IngetField()
field_b = models.IngetField()
field_c = models.IngetField()
相反,这需要一个自动增量id和字段field_a,field_b,field_c(我猜这是最常见的方法)。
是否有建立或推荐的方法来修改表的结构?我正在使用postgresql。
我想每个表的基本方法是:
我是否遗漏了这方面的任何重要问题?我想看看你的推荐......
答案 0 :(得分:2)
一般情况下,我建议使用South来更改数据库模型,它可以自动处理很多事情。
但是在保留数据的同时改变一些与此类似的东西需要一些手动工作。
我认为你的大纲主要在那里,虽然我认为你不需要稍后转换为序列。我认为您可以从头开始创建id
列。只需在复制数据后添加主键索引。
所以...我的建议:
id
,field_a和field_b。update table set id = mybase_ptr_id, field_a = other_table.field_a, ...
select max(id) from table
id
成为主键,其他字段不为空