我在 Django (1.9) 模型上有一个 CharField:
alias = models.CharField(max_length=50)
该应用程序正在使用并且已经有数据,并且已经有对象使用了全部 50 个字符。当我尝试迁移时,在不从生产数据库中收到投诉的情况下,减少此字段的 max_length 的最简单方法是什么?如果它有所作为,DB 就是 postgresql。
我在 Django (1.9) 模型上有一个 CharField:
alias = models.CharField(max_length=50)
该应用程序正在使用并且已经有数据,并且已经有对象使用了全部 50 个字符。当我尝试迁移时,在不从生产数据库中收到投诉的情况下,减少此字段的 max_length 的最简单方法是什么?如果它有所作为,DB 就是 postgresql。
我认为正确的方法是简单地进入开发 python 终端并访问该特定模型的所有对象并将别名的值截断为:
for object in MyModel.objects.all():
object.alias = object.alias[:REDUCED_LENGTH]
object.save()
并且,更改max_length
模型中的 CharField 并运行迁移。
将 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()