Я хочу отсортировать результаты из наборов запросов для django по определенной структуре имен и связанных объектов. Order_by () нежизнеспособен, так как не принимает методы. Создание дополнительного столбца, который жестко кодирует желаемое имя, нецелесообразно, и это обходной путь для отсутствия функциональности.
Я подумал, что для этого нужно использовать собственный менеджер, но у меня возникли проблемы, поскольку sorted () всегда возвращает список, а django хочет, чтобы объект оставался как QuerySet. Итак, мой вопрос заключается в том, есть ли какой-нибудь достойный способ использовать sorted () в пользовательском классе (где класс - это в основном список с некоторыми дополнительными методами) и заставить его остаться в этом пользовательском классе? На самом деле это довольно общий характер, и, вероятно, он используется не только в QuerySets.
class ClientManager(models.Manager):
def get_query_set(self):
set = super(ClientManager,self).get_query_set()
return sorted(set, key=lambda a: a.fullName())
Как пара баллов (и ответы на некоторые комментарии здесь):
- Документация к аннотации, похоже, подразумевает, что она ограничена функциями агрегирования. Я бы хотел, чтобы это вместо этого выполнялось для метода.
- Кэширование значения - слишком большой обходной путь для того, что я хотел бы сделать. Даже если это лучшее решение с некоторых точек зрения, на мой вкус оно недостаточно динамично и, по моему мнению, нарушает DRY.
Я видел много постов на эту тему, возможно, отсутствие реальных возможностей сортировки является недостатком django. Такая сортировка необходима, чтобы я мог пробраться через администратора django для множества данных, отсортированных понятным для человека способом.
Добавлен вопрос
Это могло бы быть жизнеспособным решением, если бы я мог превратить список объектов в QuerySet объектов. Кто-нибудь знает, возможно ли это? В частности, преобразовать его в объект <class 'django.db.models.query.QuerySet'>
.