64
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
12
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…
- [Django]-Django: How to set a field to NULL?
- [Django]-AWS: can't connect to RDS database from my machine
- [Django]-Substring in a django template?
5
The order in which you define your managers matters. Admin takes the first manager defined on the model.
So if you do like this:
subset = CustomManager() # the default manager
objects = models.Manager() # the one I want admin to use
the default manager will be subset
and if you do like this:
objects = models.Manager() # the default manager
subset = CustomManager() # your own manager
then the default manager will be objects
.
- [Django]-ManyRelatedManager object is not iterable
- [Django]-Django – Highlight Navigation based on current page?
- [Django]-Django: How to create a model dynamically just for testing
1
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
- [Django]-Supervising virtualenv django app via supervisor
- [Django]-Can one use the Django database layer outside of Django?
- [Django]-Django DoesNotExist
Source:stackexchange.com