Un problema muy común cuando haces una migración, en concreto a la hora de acortar los carácteres máximos o longitud en una columna, es no poder hacerlo porque ya existe contenido y sería un cambio destructivo. Puede ser que incluso visualices por el terminal un error como: psycopg2.errors.StringDataRightTruncation: value too long for type character varying
.
¿Solución? Acortar el contenido, no hay otra. Podemos hacerlo usando el ORM de Django.
Primero entramos en la shell
de Django.
python3 manage.py shell
Y ahora partimos con la siguiente premisa: el model se denomina Post
, la columna content
y quiero reducir a 2000 carácteres.
from app.models import Post
from django.db.models.functions import Length
posts_big = Post.objects.annotate(text_len=Length('content')).filter(text_len__gt=2000)
for post in posts_big:
post.content=post.content[:2000]
post.save()
Ya puedes realizar la migración. ¡Mucha suerte!
{{ comments.length }} comentarios