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.