Django: los campos tipo slug

Cuando -en programación web- queremos un campo del tipo slug habitualmente es porque tenemos un valor que pensamos convertir en url o similar, el ejemplo más claro lo podemos ver en este blog, con el título de cada entrada y la url de la misma:

  • Django: los campos tipo slug -> django-los-campos-tipo-slug
  • Dovecot, pequeñas peculiaridades -> dovecot-pequenas-peculiaridades

Los slugs (los de la derecha) se adaptan a url's canónicas que todo el mundo puede  visitar, sin caracteres raros ni ningún otro tipo de mala influencia para la gran G.

Django ya había pensado en ello y por eso tiene un tipo de datos SlugField, en general si a la hora de modelar la base de datos tomamos algo de tiempo para hacer las cosas bien nos ahorraremos mucho código. Veamos un poco de models.py para hacernos una idea de como queda el invento:

class Entry(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField() 

Definimos el campo slug como SlugField como habíamos dicho y dejamos que la magia se ocupe del resto. Por otro lado en la parte de administración debemos decirle que ese campo se tiene que rellenar de forma automágica con el contenido sluggeado del campo title. El correspondiente código de admin.py:

class AdminEntries(admin.ModelAdmin):
    prepopulated_fields = { 'slug': ['title'] }

Una vez hecho ésto tan solo nos queda ir al admin y probar que funciona, si configuráis el campo slug como visible veréis que según vamos escribiendo en el input del title se va generando el slug. Poco más de 5 lineas para tener la funcionalidad básica de un slug lista para usar en Django.

code django

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.