Django - преобразовать список обратно в запрос
У меня есть несколько записей, которые я хотел бы сортировать на основе вычисленного значения. Получил ответ здесь... вот так:
sorted(Profile.objects.all(), key=lambda p: p.reputation)
в классе Profile следующим образом:
class Profile(models.Model):
...
@property
def reputation(self):
...
К сожалению, общий вид ожидает объект запроса и выдает ошибку, если я даю ему список.
Есть ли способ сделать это, который возвращает запрос
или...
Можно ли каким-либо образом преобразовать список в запрос? Не удалось найти что-либо подобное в документах django.
Я надеюсь не денормализовать данные, но я думаю, что буду, если придется.
Обновление/Ответ:
кажется, что единственный способ вернуть запрос - если вы можете получить всю свою логику в запросах sql.
Если это невозможно, (я думаю) вам нужно денормализовать данные
Ответы
Ответ 1
Нет смысла преобразовывать список данных обратно в запрос. Объект запроса никогда не хранит данные; он просто представляет запрос к базе данных. Он должен будет получить все снова, если вы внесете свой список в запрос, и это будет избыточным и очень плохим по производительности.
Что вы можете сделать:
- Опишите, как вычисляется поле
reputation
; возможно, возможно каким-то образом заказать данные в базе данных.
- Измените представление, чтобы не требовать объект запроса. Если необходимо выполнить дополнительную фильтрацию и т.д., Это должно быть сделано до любого заказа, так как для заказа потребуется меньше времени с меньшим количеством записей (и меньше данных будет извлечено из базы данных). Таким образом, вы можете отправить объект отфильтрованного запроса в сортировку перед тем, как отправить его в шаблон (который не должен заботиться о том, является ли он запросом или списком.)
Ответ 2
Хорошо... этот пост теперь старый, но что вы могли бы сделать, это получить все ids
объектов в вашем списке, а затем выполнить model.objects.filter(pk__in=list_of_ids)