3

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

alias = models.CharField(max_length=50)

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

4

2 回答 2

5

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

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

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

于 2017-05-18T05:58:53.360 回答
2

将 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()
于 2017-05-18T05:57:23.917 回答