python - count() on filter chains in Django -


when chaining filters in django, efficient way of counting resulting records individual filter? without running filter twice is.

i.e.

 results = my_model.objects.all()   filter in my_filters:       results = results.filter(filter.get_filter_string())       individual_num_records_affected = my_model.objects.filter(filter.get_filter_string()) 

since need number of results @ each step, more efficient use .count() on querysets.

from querysets documentation:

note: if need determine number of records in set (and don’t need actual objects), it’s much more efficient handle count @ database level using sql’s select count(*). django provides count() method precisely reason.

you should not use .len() load of record python objects , calls len() on result don't need. need number of records , .count() better option.

also, remember querysets evaluated lazy.

internally, queryset can constructed, filtered, sliced, , passed around without hitting database. no database activity occurs until evaluate queryset.

so, until try use results of queryset, queryset not evaluated i.e. no database hit occur.

the statement results = results.filter(filter.get_filter_string()) not hit database until try use results. you can .filter() on queryset multiple times until don't use it, there no database hit.


Comments

Popular posts from this blog

c# - Binding a comma separated list to a List<int> in asp.net web api -

Delphi 7 and decode UTF-8 base64 -

html - Is there any way to exclude a single element from the style? (Bootstrap) -