hay varias soluciones que vienen a la mente:
definen lo queryset a utilizar para la lista de cambios con ModelAdmin.queryset().
instale 2 administradores en su modelo, el primero que el administrador encuentre se usará como el predeterminado AFAIK.
class SomeThing(models.Model):
objects = models.Manager()
shares = ShareManager()
añadir nuevo método en su gestor personalizado que devuelve las cosas sólo se activa y dejar get_query_set
como está por defecto.
class ShareManager(models.Manager):
def get_active_items(self):
return self.get_query_set().filter(active=True)
Seguimiento
Creo que la solución más adecuada en su caso se combina # 1 y # 2 de variación.
Configure su administrador personalizado como objects
para que todos puedan acceder a él (creo que esto debería funcionar para su problema de reusabilidad) y también instale el administrador predeterminado en su modelo y úselo en ModelAdmin.queryset()
.
class SomeThing(models.Model):
objects = ShareManager()
admin_objects = models.Manager()
debería haber incluido ModelAdmin.queryset()
método de ejemplo también, así que aquí está.
def queryset(self, request):
qs = self.model.admin_objects.get_query_set()
# TODO: this should be handled by some parameter to the ChangeList.
# otherwise we might try to *None, which is bad ;)
ordering = self.ordering or()
if ordering:
qs = qs.order_by(*ordering)
return qs
Nota la línea qs = self.model.admin_objects.get_query_set()
está trabajando con admin_objects
que es la instancia del gestor de plano que incluye artículos publicados.
El resto de esta implementación del método queryset
es la implementación predeterminada de Django que generalmente llama a qs = self.model._default_manager.get_query_set()
.
Espero que esto aclare un poco las cosas.
Gracias por las múltiples soluciones, me está ayudando a comprender más. Un par de preguntas: Para el n. ° 1, ¿cómo obtengo todos los objetos como el conjunto de preguntas si dejo el Administrador personalizado en su lugar? # 2 y # 3 también funcionan, pero me encuentro con problemas cuando uso aplicaciones reutilizables como queryset = TaggedItem.objects.get_by_model (Share, tag). – knuckfubuck
Me olvidé de poner un ejemplo del método 'queryset'. –
Gracias por su seguimiento. La combinación funciona genial. – knuckfubuck