Ich schreibe eine Django-Anwendung, die ein Modell für Menschen hat, und ich habe einen Haken gefunden. Ich lege Rollenobjekte Personen zu, die eine Viele-zu-Viele-Beziehung verwenden - wobei Rollen einen Namen und ein Gewicht haben. Ich möchte meine Liste der Leute nach dem Gewicht ihrer schwersten Rolle ordnen. Wenn ich People.objects.order_by ('- roles__weight') mache, erhalte ich Dubletten, wenn Leuten mehrere Rollen zugewiesen sind.Django: Bestellen Sie ein Modell von einem Viele-zu-Viele-Feld
Meine ursprüngliche Idee war, ein denormalisiertes Feld namens Schwerstgewicht hinzuzufügen - und danach sortieren. Dies könnte dann jedes Mal aktualisiert werden, wenn eine neue Rolle von einem Benutzer hinzugefügt oder entfernt wird. Es stellt sich jedoch heraus, dass es keine Möglichkeit gibt, eine benutzerdefinierte Aktion jedes Mal durchzuführen, wenn ein ManyToManyField in Django (yet, auf jeden Fall) aktualisiert wird.
Also dachte ich, ich könnte dann völlig über Bord gehen und ein benutzerdefiniertes Feld, einen Deskriptor und einen Manager schreiben, um damit umzugehen - aber das scheint extrem schwierig, wenn der ManyRelatedManager dynamisch für ein ManyToManyField erstellt wird.
Ich habe versucht, mit einigen cleveren SQL zu kommen, die das für mich tun könnte - ich bin sicher, dass es mit einer Unterabfrage (oder ein paar) möglich ist, aber ich würde besorgt sein, dass es nicht kompatibel ist Die Datenbank-Backends unterstützt Django.
Hat jemand das schon einmal gemacht - oder haben Sie irgendwelche Ideen, wie es erreicht werden könnte?
Genau das, was ich war Auf der Suche nach. Ich verwende Django 1.1 nicht, aber ich kann dieses SQL in meinem benutzerdefinierten Manager verwenden. Vielen Dank :) –