Я пишу приложение Django, у которого есть модель для People, и я попал в ловушку. Я назначаю объекты Role для людей, использующих отношения "Много-ко-многим", где роли имеют имя и вес. Я хочу заказать свой список людей по самому тяжелому весу. Если я делаю People.objects.order_by ('- role__weight'), то я получаю дубликаты, когда у людей есть несколько назначенных им ролей.
Моя первоначальная идея заключалась в том, чтобы добавить денормализованное поле, называемое тяжелее-ролевым весом, и сортировать по нему. Затем это можно было обновить каждый раз, когда новая роль была добавлена или удалена пользователем. Однако выясняется, что нет никакого способа выполнить пользовательское действие каждый раз, когда ManyToManyField обновляется в Django (пока, в любом случае).
Итак, я думал, что смогу тогда полностью переборщить и написать собственное поле, дескриптор и менеджер, чтобы справиться с этим, но это кажется чрезвычайно сложным, когда ManyRelatedManager создается динамически для ManyToManyField.
Я пытаюсь придумать какой-нибудь умный SQL, который мог бы сделать это для меня - я уверен, что это возможно с подзапросом (или несколькими), но я был бы обеспокоен тем, что он не был совместимым. базы данных поддерживает Django.
Кто-нибудь сделал это раньше - или есть идеи, как это можно было бы достичь?