He alterado el administrador predeterminado en algunos de los objetos que un GenericForeignKey()
puede hacer referencia de modo que esos objetos pueden no aparecer más dentro de ese administrador predeterminado.Usando un administrador no predeterminado con GenericForeignKey()
Tengo otros administradores que podrán encontrar estos objetos borrados, pero no veo la forma de contarles el marco de tipos de contenido sobre ellos. es posible?
Me estoy poniendo en práctica 'eliminación suave' con algunos modelos que implica los siguientes gestores:
from django.db import models
SDManager(models.Manager):
def get_query_set(self):
return super(SDManager, self).get_query_set().filter(is_deleted=False)
SDDeletedManager(models.Manager):
def get_query_set(self):
return super(SDDeletedManager, self).get_query_set().filter(is_deleted=True)
Esto me permite hacer lo siguiente:
SDModel(models.Model):
# ...
objects = SDManager() # Only non (soft) deleted objects
all_objects = models.Manager() # The default manager
deleted_objects = SDDeletedManager() # Only (soft) deleted objects
Cuando se utiliza un campo GenericForeignKey()
en un modelo para hacer referencia a un objeto definido como SDModel
, utiliza el atributo _default_manager
que evalúa al administrador objects
, para obtener la referencia. Esto significa que pierde referencias cuando los objetos son borrados por software.
Esta fue una de las principales razones por las que estaba usando los campos GenericForeignKey()
. Una solución que he estado dando vueltas es implementar una versión menor de la estructura de tipos de contenido, de modo que pueda definir mi propio get_object()
que utiliza el administrador all_objects
para acceder al objeto de referencias.
Así que mi pregunta realmente es:
¿Es posible utilizar un gestor no predeterminada con el marco de tipos de contenido existente para que encuentre los objetos eliminados suaves, o voy a tener que volver a poner en práctica todo el partes que necesito desde cero?
Es posible que deba entrar en más detalles y publicar código de ejemplo. – stefanw
He agregado más detalles para darle una idea más clara de mi dilema. –
Disculpe si me falta algo obvio, pero ¿ha considerado mantener los "objetos" como los modelos predeterminados. ¿Administra el administrador y nombra al SDManager como algo más? es decir, intercambiando las definiciones de objetos y todos_objetos? –