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

¿Me ayudas?

No te sientas obligado a realizarme una donación, pero cada aportación me ayuda a mantener el sitio en activo para que continúe existiendo y me motiva a continuar creando nuevo contenido.

Comprame un café
Pulsa sobre la imagen
  • 1 café: Se mantiene el dominio durante 4 meses.
  • 2 cafés: Se paga 1 mes de servidor.
  • 3 cafés: Se cubre 1 mes de Black box.

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...