当数据已经存在于db中时,如何减少Django中CharField的max_length

时间:2017-05-18 05:17:48

标签: python django maxlength django-model-field

我在Django(1.9)模型上有一个CharField:

<user-mapping>
<authorize
username="test"
password="testtest">
<connection name="Windows 10">
<protocol>rdp</protocol>
<param name="hostname">x.x.x.x</param> //my desktops ip address (From google)
<param name="port">3389</param>
</connection>
</authorize>
</user-mapping>

该应用正在使用且已有数据,并且已有使用所有50个字符的对象。当我尝试迁移时,在没有收到生产数据库投诉的情况下减少此字段的max_length的最简单方法是什么?如果它有所不同,DB就是postgresql。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

我认为正确的方法是简单地去开发python终端并访问该特定模型的所有对象并截断别名的值:

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

并且,更改模型中CharField中的max_length并运行迁移。