Django acortar el contenido o longitud de una columna

1 minuto

Django

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!

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

Donación con recompensa

  • 1 café: Respondo a tu duda en los comentarios.
  • 2 cafés: Respondo en menos de 24h a tu comentario.
  • 3 cafés: Todo lo anterior y además te doy las gracias en mis redes.
Comprame un café

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario

Tal vez también te interese...