繁体   English   中英

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

[英]How to reduce max_length of CharField in Django when data already exists in db

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

alias = models.CharField(max_length=50)

该应用程序正在使用中,并且已经有数据,并且已经有使用所有50个字符的对象。 尝试迁移时,最简单的方法是减小此字段的max_length而不使生产数据库收到投诉吗? 如果有区别,DB是postgresql。

将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()

我认为正确的方法是直接进入python开发终端并访问该特定模型的所有对象,并将别名的值截断为:

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

然后,在模型的CharField中更改max_length并运行迁移。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM