Queryset-подобная фильтрация коллекции объектов в Django
Я ищу способ легко отфильтровать коллекцию объектов Model, не обращаясь к базе данных каждый раз. По определению, QuerySets ленивы и всегда будут попадать в БД. Поэтому мне интересно, существует ли что-нибудь, что может сделать это. Если нет, возможно, это хорошая библиотека для создания.
Например:
all_records = object_set(Record.objects.filter(company=user.company))
object_set
является гипотетической функцией, которая собирает все объекты в QuerySet в виде статических данных. Результатом будет экземпляр "диспетчера объектов", в котором могут быть запущены фильтры, аналогичные фильтрам QuerySet. Это было бы особенно полезно при хранении создания, обновления и удаления объектов на основе данных из многомерных списков данных.
for row in data:
for col in row:
# this would not hit the DB. Only filter within the "object_set" in memory.
all_records.filter(date=col.date, type=col.type, creator=col.user)
Я понимаю, что, возможно, пытаюсь решить эту проблему неправильно, но, тем не менее, я думаю, что это был бы отличный инструмент для Django. Кто-нибудь знает о существующей библиотеке или функциональности в Django, которая решит эту проблему? Заранее спасибо!
3 ответа
Я думаю, что метод QuerySet select_related это то, что вы хотите:
Пожалуйста, посмотрите файл manager.py в следующем проекте: django-model-utils /.../ Manager.py
Он должен показать вам, как он реализовал набор запросов
def get_query_set(self):
qs = super(QueryManager, self).get_query_set().filter(self._q)
if self._order_by is not None:
return qs.order_by(*self._order_by)
return qs
Если ваши мотивы для этого вопроса - длинные наборы данных, используйте кэш Redis в вашем проекте Django.