Los modelos están armados, por lo cual trabajar ahora con el admin iba a ser mucho más sencillo. El primer paso era crear una serie de colores y luego simular unos votos.
Armé el Verde, Rojo y Azul:
Luego definí los votos, siendo cada uno único por usuario:
Acto seguido, me di cuenta de que algo se me pasó por alto: el modelo de color no tiene ningun valor hexadecimal. Por lo tanto, si armo un color "Negro", sin definir "#000" no hay forma de colorearlo en pantalla. 😲
Migración de Color
En principio definí el campo con un default en blanco (#FFF), porque sino los registros creados previamente no iban a tener un valor asignado. Otra opción era definir el campo como null, pero eso no tendría sentido dado que cada color debía tener obligatoriamente un nombre y un valor hexadecimal:
hexa = models.CharField(max_length=7, default="#FFF")
Por otro lado, en admin.py definí una clase para armar las columnas que quería visualizar tomando los campos de name y hexa.
class ColorAdmin(admin.ModelAdmin):
list_display = ('name', 'hexa')
admin.site.register(Vote)
admin.site.register(Color, ColorAdmin)
Dando como resultado:
Definir los valores hexa
Podría abrir Photoshop, Paint o algún editor online de colores, elegir uno y copiarme el valor hexadecimal. Pero me daba pereza, así que decidí hacer algo que me llevaría más trabajo: implementar una librería de colores.
Así descubrí a django-colorfield. Luego de instalarla con pip, modifiqué mi modelo:
from colorfield.fields import ColorField
(...)
hexa = ColorField(max_length=7, default="#FFF")
Ahora, por ejemplo si quiero crear un color nuevo, tengo esta belleza en django-admin:
Ahora puedo definir todos los colores que quiero sin salirme del administrador.
En el próximo episodio...
Con los colores definidos, ya podemos votar uno. El problema es que la API nos deja emitir votos a cualquier usuario, y eso es una brecha de seguridad enorme.
En el próximo episodio de esta apasionante historia, veremos cómo me meto en las entrañas del módulo de autenticación y tokens para generar sesiones con DRF.
Top comments (0)