I've created a custom Manager for a Django model which returns a QuerySet holding a subset of objects.all(). I need this to be the model's default Manager, since I am also creating a custom tag which will retrieve content from any model (specified by an argument), and needs to use the default Manager for the specified model. All that works fine, except - Django Admin is ALSO using the default Manager for this particular model, which means that not all model instances appear in the admin.
The Django docs don't help:
If you use custom Manager objects, take note that the first Manager Django encounters (in
the order in which they're defined in the model) has a special status. Django interprets this first Manager defined in a class as the "default" Manager, and several parts of Django (though not the admin application) will use that Manager exclusively for that model.
(Django Managers documentation)
The admin isn't supposed to use the default Manager, but it seems to be in my case. Note that I have also explicitly add the default Manager objects
:
subset = CustomManager() # the default manager
objects = models.Manager() # the one I want admin to use
How can I specify which Manager the admin should use?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…