#20826 closed Cleanup/optimization (fixed)

Move `Manager.raw()` and `Manager._insert()` to the QuerySet class.

Reported by: loic84 Owned by: nobody
Component: Database layer (models, ORM) Version: master
Severity: Normal Keywords:
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

After the introduction of #20625, most methods that involve a DB query have been removed from Manager and are automatically proxied to QuerySet, only raw() and _insert() remain. After discussion with @akaariai on IRC we came to the conclusion that it would make sense to move these to the QuerySet class as well.

The previous goal was for QuerySet to focus on retrieval, but this has somewhat failed as most methods that could belong to Manager (like create()) already live on the QuerySet class. The introduction of hybrid methods like get_or_create() or update_or_create() also demonstrates that the distinction between the different kinds of queries is not obvious to make.

If this ticket is accepted, the new objective would be defined as follows:

  • Anything "query" belongs to QuerySet.
  • Manager is responsible for the integration between a Model and a QuerySet.
  • Manager works as a hook to pre/post-process or even replace QuerySet methods when needed. (See current implementation of Manager.all() or RelatedManager.create()).

Change History (4)

comment:1 Changed 22 months ago by loic84

  • Has patch set
  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

comment:2 Changed 22 months ago by timo

  • Triage Stage changed from Unreviewed to Ready for checkin

Assuming the idea isn't rejected by someone else, the patch looks good.

comment:3 Changed 22 months ago by akaariai

I think the move makes sense. .raw() belongs to queryset just as much as .create(). So, things will be a bit more consistent after the move.

comment:4 Changed 22 months ago by Tim Graham <timograham@…>

  • Resolution set to fixed
  • Status changed from new to closed

In acd1d439fd9b3e77bc0291dcd62c09f345d8622c:

Fixed #20826 -- Moved Manager.raw() and Manager._insert() to the QuerySet class.

Note: See TracTickets for help on using tickets.
Back to Top