Opened 7 years ago

Last modified 7 years ago

#27729 closed New feature

Add a method to evaluate QuerySets. — at Version 1

Reported by: AlbinLindskog Owned by: Albin Lindskog
Component: Database layer (models, ORM) Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: yes Needs documentation: yes
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by AlbinLindskog)

I would often like to evaluate a queryset once, i.e. fetch it to local memory, and then repeatedly perform various operations on it, e.g. filtering.

As i currently stands to do that I can either:

  • Drop to some native python data structure, e.g. a list, but I find the Django ORM syntax more understandable.
  • Not evaluate the QuerySet, but then the performance will take a hit as each operation will query the database.
  • I could also force the QuerySet to evaluate, for example by calling len() or bool(), but unless you are familiar with how Django handels QuerySets it's not clear what's being accomplished behind the scenes.
  • Lastly I can use the internal method _fetch_all(), which is bad practise. Secondly, because it does not return a QuerySet you can not chain it.


Needless to say, I don't like either option. I think the QuerySet class needs a evaluate()-method, which does, as the name suggest, evaluates the QuerySet.

I've added a patch that accomplishes this. Could I get some feedback on my suggestion and code? If the feedback is positive I'll move to update the documentation and create a pull request.

I should clarify that I have assign this ticket to myself.

Change History (2)

by AlbinLindskog, 7 years ago

Attachment: evaluate.diff added

comment:1 by AlbinLindskog, 7 years ago

Description: modified (diff)
Needs documentation: set
Note: See TracTickets for help on using tickets.
Back to Top