当数据已存在于数据库中时,如何减少 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
和 运行 迁移。
我在 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
和 运行 迁移。