python - theme - django-admin command
¿Por qué no puedo registrar múltiples Django ModelAdmin con el mismo modelo? (1)
Usa modelos de proxy:
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()
Ahora puede registrar 2 modelos sin reemplazar el método ModelAdmin.queryset
:
class EventAdmin(admin.ModelAdmin):
# ModelAdmin config
admin.site.register(ActiveEvent, EventAdmin)
admin.site.register(ArchiveEvent, EventAdmin)
Puede leer el modo sobre modelos de proxy y gerentes en el documento.
Además, usa esto:
queryset = super(EventArchiveAdmin, self).queryset(request)
Como primer argumento super()
toma la clase actual . Ver doc
Nota: django ha cambiado el nombre de Manager.get_query_set
a Manager.get_queryset
en django == 1.7.
Tengo el siguiente ModelAdmin:
class EventAdmin(admin.ModelAdmin):
# ModelAdmin config
def queryset(self, request):
queryset = super(EventAdmin, self).queryset(request)
return queryset.exclude(date_end__lt=date.today())
admin.site.register(Event, EventAdmin)
Ahora quiero agregar un modelo para administrar eventos archivados (anteriores a hoy).
class EventArchiveAdmin(admin.ModelAdmin):
# ModelAdmin config
def queryset(self, request):
queryset = super(EventArchiveAdmin, self).queryset(request)
return queryset.filter(date_end__lt=date.today())
admin.site.register(Event, EventArchiveAdmin)
Pero si trato de hacerlo, obtengo la excepción AlreadyRegistered .
¿Por qué no puedo implementar otro ModelAdmin con el mismo modelo y cómo puedo obtener diferentes vistas de administrador del mismo modelo?
Sé que puedo implementar un list_filter
personalizado en mi clase, pero me gustaría mantener las cosas separadas en diferentes páginas.