2017-05-18 40 views
0

已经存在,我有一个CharField上一个Django(1.9)模型:如何降低CharField的MAX_LENGTH在Django当数据在DB

alias = models.CharField(max_length=50) 

的应用程序正在使用,已经有数据,有对象使用全部50个字符。我尝试迁移时,如何减少此字段的最大长度而不会收到来自我的生产数据库的投诉,最简单的方法是什么? DB是postgresql,如果它有所作为。

+0

你想保留这些文本吗?或删除它们? – Exprator

+0

只需更改models.py中的定义...这将在设置新值时从pythons一侧强制执行,但不会更改db上的约束... –

+0

'fron django.db.models import F; MyModels.objects。 update(alias = F('alias')[:new_length])'(我想!)会缩短所有现有的字段,如果这就是你的问题 –

回答

0

减少MAX_LENGTH = 50到其他MAX_LENGTH = 20

> python manage.py makemigrations 
> python manage.py migrate 

您保存将与新MAX_LENGTH

为工作的所有新数据中存在的数据可以让简单的脚本

from myproject.models import Mymodel 

for obj in Mymodel.objects.all(): 
    obj.Firstname = obj.Firstname[0:3]  
    obj.save() 
0

我认为正确的方法是简单地去开发Python终端d访问那个特定型号的所有对象,并截断值别名:

for object in MyModel.objects.all(): 
     object.alias = object.alias[:REDUCED_LENGTH] 
     object.save() 

,并改变了max_length在CharField在模型和运行迁移。