Вы можете включить модель дважды на сайте администратора, зарегистрировав для нее два класса ModelAdmin
. Вы можете переопределить queryset()
метод ModelAdmin
, чтобы настроить отображение экземпляров. Обратите внимание, что вам нужно определить прокси модели и использовать его во втором ModelAdmin
классе, в противном случае Django жалуется на то, что дважды регистрирует одну и ту же модель.
models.py
class ExampleModel(models.Model):
expired = models.DateField()
class ExpiredExampleModelProxy(ExampleModel):
class Meta:
proxy = True
verbose_name = 'Expired Example'
verbose_name_plural = 'Expired Examples'
admin.py
class NotExpiredExampleAdmin(models.ModelAdmin):
def queryset(self, request):
return (super(ExampleAdmin, self).queryset(request)
.filter(expiration__gte=date.today()))
class ExpiredExampleAdmin(models.ModelAdmin):
def queryset(self, request):
return (super(ExampleAdmin, self).queryset(request)
.filter(expiration__lt=date.today()))
admin.site.register(ExampleModel, NotExpiredExampleAdmin)
admin.site.register(ExpiredExampleModelProxy, ExpiredExampleAdmin)
Вместо настройки ModelAdmin.queryset
вы также можете определить пользовательские менеджеры для моделей, чтобы получить такую же фильтрацию и вне администратора.
Смотри также