Supongamos que estoy creando una aplicación de clasificación de películas. Un usuario que haya iniciado sesión debería poder calificar la película con estrellas (en el rango de 1 a 5).
Quiero acceder rápidamente a todos los nombres de los calificadores junto con su calificación. Si un usuario califica la película nuevamente, la calificación debe actualizarse. Al mismo tiempo, si un usuario decide retirar su calificación, es decir, proporcionar una calificación cero, me gustaría eliminar la entrada del campo.
Creo que el diccionario sería la mejor opción para lograr lo mismo. Sin embargo, estoy abierto a sugerencias.
También quiero que un usuario vea todas las películas que ha calificado junto con la calificación.
Debe crear un campo ForeignKey entre el modelo de usuario y el modelo de votación. Permitir un solo voto por usuario; por película, es posible que desee crear una restricción de clave única, en el modelo de votación, sobre el ID de usuario y el ID de película.
El voto debe contener una relación con la película y una calificación. Si un usuario retira su voto, lo elimina de la base de datos.
El uso de un diccionario le generará problemas, ya que tendrá varias películas.
Para aumentar la velocidad y el rendimiento del conteo de votos, es posible que desee echar un vistazo al almacenamiento en caché y simplemente almacenar en caché el número de votos y actualizar el número cada vez que un usuario agrega o retira un voto en la película específica.
Puede usar: el método update_or_create() con django ORM. https://docs.djangoproject.com/en/1.10/ref/models/querysets/#update-or-create