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

renaming files in a directory using python or R -

c# - ajax - How to receive data both html and json from server? -