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
You can choose the manager by overriding the queryset method in your ModelAdmin subclass.
def get_queryset(self, request):
# use our manager, rather than the default one
qs = self.model.objects.get_queryset()
# we need this from the superclass method
ordering = self.ordering or () # otherwise we might try to *None, which is bad ;)
if ordering:
qs = qs.order_by(*ordering)
return qs
As we expect objects to be the sole manager, the admin will use manager in self.Admin.manager.
From the ticket https://code.djangoproject.com/ticket/4754 opened by troy.simpson
class filterManager(models.Manager):
def get_query_set(self):
return super(filterManager, self).get_query_set().filter(name='troy')
class Blah(models.Model):
name = models.CharField(maxlength=100)
objects = filterManager()
class Admin:
manager = filterManager()
Tested with Django 1.11
Updated code:
def get_queryset(self, request):
"""
Returns a QuerySet of all model instances that can be edited by the
admin site. This is used by changelist_view.
"""
qs = self.model._default_manager.get_queryset()
# TODO: this should be handled by some parameter to the ChangeList.
ordering = self.get_ordering(request)
if ordering:
qs = qs.order_by(*ordering)
return qs
_default_manager can be replaced...