Подтвердить что ты не робот

Django - преобразовать список обратно в запрос

У меня есть несколько записей, которые я хотел бы сортировать на основе вычисленного значения. Получил ответ здесь... вот так:

sorted(Profile.objects.all(), key=lambda p: p.reputation)

в классе Profile следующим образом:

class Profile(models.Model):

    ...

    @property
    def reputation(self):
        ...

К сожалению, общий вид ожидает объект запроса и выдает ошибку, если я даю ему список.

Есть ли способ сделать это, который возвращает запрос

или...

Можно ли каким-либо образом преобразовать список в запрос? Не удалось найти что-либо подобное в документах django.

Я надеюсь не денормализовать данные, но я думаю, что буду, если придется.

Обновление/Ответ:

кажется, что единственный способ вернуть запрос - если вы можете получить всю свою логику в запросах sql.

Если это невозможно, (я думаю) вам нужно денормализовать данные

4b9b3361

Ответ 1

Нет смысла преобразовывать список данных обратно в запрос. Объект запроса никогда не хранит данные; он просто представляет запрос к базе данных. Он должен будет получить все снова, если вы внесете свой список в запрос, и это будет избыточным и очень плохим по производительности.

Что вы можете сделать:

  • Опишите, как вычисляется поле reputation; возможно, возможно каким-то образом заказать данные в базе данных.
  • Измените представление, чтобы не требовать объект запроса. Если необходимо выполнить дополнительную фильтрацию и т.д., Это должно быть сделано до любого заказа, так как для заказа потребуется меньше времени с меньшим количеством записей (и меньше данных будет извлечено из базы данных). Таким образом, вы можете отправить объект отфильтрованного запроса в сортировку перед тем, как отправить его в шаблон (который не должен заботиться о том, является ли он запросом или списком.)

Ответ 2

Хорошо... этот пост теперь старый, но что вы могли бы сделать, это получить все ids объектов в вашем списке, а затем выполнить model.objects.filter(pk__in=list_of_ids)