Использовать Django API фильтра Queryset в списке экземпляров модели в памяти? - PullRequest
0 голосов
/ 06 апреля 2020

Можно ли повторно использовать Django Queryset API, когда я уже получил список объектов? то есть

foos = list(Foo.objects.filter(color="red"))
# below doesn't work, but is what I'd like to reproduce
large_foos = foos.filter(size="large")
small_foos = foos.filter(size="small")

Конечно, я могу перебирать свой список foos, но было бы более понятным повторно использовать API, особенно если фильтруются несколько атрибутов.

Варианты использования почему я хочу фильтровать в памяти:

  • Я хочу свести к минимуму количество запросов в БД
  • набор возврата foos мал и более эффективен для фильтрации в памяти
  • color индексируется, но size не
  • size имеет большую мощность

1 Ответ

1 голос
/ 06 апреля 2020
foos = list(Foo.objects.filter(color="red"))

large_foos = [foo for foo in foos if foo.size='large']
small_foos = [foo for foo in foos if foo.size='small']

Может работать. Но если у вас много foos экземпляров, это может быть намного медленнее, чем выполнение дополнительного SQL запроса.

...