Opened 2 years ago

Last modified 2 years ago

#17494 new New feature

Query Methods

Reported by: zacharyvoase Owned by: nobody
Component: Database layer (models, ORM) Version: 1.3
Severity: Normal Keywords:
Cc: donald.stufft@…, tomek@… Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


The rationale and idea are expounded in more detail in this django-developers thread:

The idea is a simple decorator, similar to Python's @classmethod, which applies to a method on a manager and marks it as a query method—that is, a method which should be present not only on the manager, but on all querysets which come from that manager.

Attachments (0)

Change History (6)

comment:1 Changed 2 years ago by anonymous

  • Needs documentation unset
  • Needs tests unset
  • Patch needs improvement unset

django-model-utils has a solution to this that was originally from

comment:2 Changed 2 years ago by dstufft

  • Cc donald.stufft@… added

comment:3 Changed 2 years ago by zacharyvoase

If you take a look at the django-developers thread you'll see I did a similar thing in django-qmixin. The point is, we don't want custom QuerySet subclasses, we want a decorator for methods on the Manager, which Manager.__metaclass__ then uses to dynamically construct a QuerySet subclass.

comment:4 Changed 2 years ago by dstufft

django-model-utils used to dynamically generate Querysets to achieve this, which broke pickling them. I don't however know how it was dynamically generated.

In general I think the idea here is to prevent you from having to define the same method twice which that solution has, you just specify it on the QuerySet, then add it to the PassThroughManager. Same Outcome without the metaclass magic which personally find hard to understand with something that gives the same end result.

comment:5 Changed 2 years ago by oinopion

  • Cc tomek@… added

comment:6 Changed 2 years ago by lrekucki

  • Triage Stage changed from Unreviewed to Accepted

This is something definitely worth pursuing. Now we just need a good API we can all agree on. If anyone wants to work on this, please check the thread for different implementation attempts.

Last edited 2 years ago by lrekucki (previous) (diff)

Add Comment

Modify Ticket

Change Properties
<Author field>
as new
The owner will be changed from nobody to anonymous. Next status will be 'assigned'
as The resolution will be set. Next status will be 'closed'

E-mail address and user name can be saved in the Preferences.

Note: See TracTickets for help on using tickets.