Estoy escribiendo una aplicación de Django que tiene un modelo para Personas, y me he encontrado con un problema. Estoy asignando objetos Role a personas que usan una relación Muchos a Muchos, donde los roles tienen un nombre y un peso. Deseo ordenar mi lista de personas por el peso de su papel más pesado. Si hago People.objects.order_by ('- roles__weight'), entonces obtengo duplicados cuando las personas tienen múltiples roles asignados a ellos.Django: ordena un modelo por un campo de varios a varios
Mi idea inicial era agregar un campo desnormalizado llamado peso más grande-rol - y ordenar por eso. Esto podría actualizarse cada vez que se agregue o elimine un nuevo rol de un usuario. Sin embargo, resulta que no hay forma de realizar una acción personalizada cada vez que se actualiza ManyToManyField en Django (yet, de todos modos).
Entonces, pensé que podría ir completamente por la borda y escribir un campo, descriptor y administrador personalizados para manejar esto, pero eso parece extremadamente difícil cuando ManyRelatedManager se crea dinámicamente para ManyToManyField.
He estado tratando de llegar a algún SQL inteligente que pueda hacer esto por mí - estoy seguro de que es posible con una subconsulta (o algunas), pero me preocuparía que no sea compatible todo los back-ends de base de datos que admite Django.
¿Alguien ha hecho esto antes o tiene alguna idea de cómo se podría lograr?
justo lo que estaba buscando. No estoy ejecutando Django 1.1, pero puedo usar ese SQL en mi administrador personalizado. Gracias :) –