当数据已存在于数据库中时,如何减少 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,如果它有所作为。

to reduce max_length=50 to other 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 和 运行 迁移。