Sto scrivendo un'applicazione Django che ha un modello per le persone, e ho trovato un problema. Sto assegnando oggetti Role a persone che usano una relazione Many-To-Many - dove i ruoli hanno un nome e un peso. Desidero ordinare la mia lista di persone dal peso del loro ruolo più pesante. Se faccio People.objects.order_by ('- roles__weight'), ricevo duplicati quando le persone hanno più ruoli assegnati a loro.Django: Ordina un modello da un campo molti-a-molti
La mia idea iniziale era quella di aggiungere un campo denormalizzato chiamato il peso del ruolo più pesante - e ordinare per quello. Questo potrebbe quindi essere aggiornato ogni volta che un nuovo ruolo è stato aggiunto o rimosso da un utente. Tuttavia, risulta che non è possibile eseguire un'azione personalizzata ogni volta che un oggetto ManyToManyField viene aggiornato in Django (yet, in ogni caso).
Quindi, ho pensato che avrei potuto andare completamente fuori bordo e scrivere un campo personalizzato, descrittore e gestore per gestirlo - ma ciò sembra estremamente difficile quando ManyRelatedManager viene creato dinamicamente per un ManyToManyField.
Ho cercato di creare un SQL intelligente che potesse farlo per me - sono sicuro che è possibile con una sottoquery (o pochi), ma sarei preoccupato che non sia compatibile per tutti il database supporta i supporti di Django.
Qualcuno l'ha già fatto prima o ha qualche idea su come potrebbe essere raggiunto?
proprio quello che stavo cercando. Non sto eseguendo Django 1.1, ma posso usare quello SQL nel mio gestore personalizzato. Grazie :) –