Django如何处理模型的更改?或者,它为我提供了什么帮助呢?
我正在考虑一种情况,即我已经向我的数据库发布了数据,我不想丢失,但我需要对我的数据模型进行更改 - 例如,向特定类添加额外的字段,更改字段类型等。我的理解是syncdb不会改变数据库中已存在的表。
例如,假设我有以下模型:
class Person(models.Model):
name = models.CharField(max_length=200)
phone_number=models.CharField(max_length=200)
hair_colour=CharField(max_length=50)
我可能想要对我的人做的事情:
IntegerField
代替CharField
phone_number
(无论这是否是一个好主意,是否超出范围......) - 假设它是可能的。 hair_colour
'内联',因为有几个人共享相同的头发颜色 - 我希望将其更改为其他模型的外键。虽然我可以想象,如果我所做的只是更新models.py,框架很难/不可能“猜测”我的数据需要做什么,我可以想象可能还会有一些工具帮助启用它 - 它存在吗?
特别是我认为选项1必须有一些好的模式。
我对Django很新,没有任何其他ORM类型的经验,我认为这是 - 我一直对ORM有点怀疑,主要是出于上述原因:)
答案 0 :(得分:3)
Django本身不会尝试修改已创建的数据库表。您尝试做的通常称为“迁移”,Django有几种不同的数据库迁移工具。
三个南方可能是使用最广泛的,但它们各自有不同的方式来处理迁移。您可以在Django Packages上查看有关比较的更多详细信息。
答案 1 :(得分:1)
您所询问的大部分内容都可以通过django项目South来完成。您将其添加为INSTALLED_APP。创建一个基线,然后在模型更改时创建SQL语句,将表和表中的行转换为新的模型格式。