Use proxy models:
class Event(db.Model): ... class ActiveEventManager(models.Manager): def get_queryset(self): return super(ActiveEventManager, self).get_queryset().filter(active=True) class ActiveEvent(Event): class Meta: proxy = True objects = ActiveEventManager() class ArchiveEventManager(models.Manager): def get_queryset(self): return super(ArchiveEventManager, self).get_queryset().filter(active=False) class ArchiveEvent(Event): class Meta: proxy = True objects = ArchiveEventManager()
Now you can register 2 models without overriding the ModelAdmin.queryset method:
class EventAdmin(admin.ModelAdmin): # ModelAdmin config admin.site.register(ActiveEvent, EventAdmin) admin.site.register(ArchiveEvent, EventAdmin)
You can read the proxy mode and managers mode in the document.
Also use this:
queryset = super(EventArchiveAdmin, self).queryset(request)
As the first argument to super() take the current class. See doc
Note: django renamed Manager.get_query_set to Manager.get_queryset as django == 1.7.
defuz
source share