2015-07-02 3 views
2

Несколько фильтров необходимо применять к QuerySet. Должен ли я запрашивать базу данных несколько раз или сортировать/фильтровать в Python?Лучшая практика Django, фильтр ORM или python?

data = Data.objects.all() 
for f in somefilters: 
    tempdata = data.filter(*f.args) 
    # do work 

or 

data = list(Data.objects.all()) 
for f in somefilters: 
    tempdata = filter(data, key=...) 
    #do work 
+1

Что говорят эталоны? –

+1

База данных, скорее всего, сможет фильтровать быстрее, если вы ее правильно разработали, но попробуйте скамейку –

+2

Почему вы не используете '.objects.get_queryset(). Filter (...)'? – jonrsharpe

ответ

4

Если у вас есть абсурдное количество фильтров, вероятно, вы должны просто использовать Q objects. Для этого они нужны.

from django.db.models import Q 

q = Q() 
for filter in filters: 
    q |= Q(*f.args) 
data = Data.objects.filter(q) 

# Do things with `data` 
+0

upvoted. Вы также можете использовать: 'q = [Q (f.args) для f в фильтрах]', а затем 'Data.objects.filter (* q)' – Pynchia

+1

@Pynchia Я уверен, что это создаст фильтр 'AND' вместо фильтра 'OR'. –

+0

Да, вы правы – Pynchia

Смежные вопросы