Solución:
Puede obtener el nombre del modelo del objeto de esta manera:
self.__class__.__name__
Si prefiere el tipo de contenido, debería poder obtenerlo así:
from django.contrib.contenttypes.models import ContentType
ContentType.objects.get_for_model(self)
El método get_for_model
hace algunas cosas elegantes, pero hay algunos casos en los que es mejor no usar esas cosas elegantes. En particular, digamos que desea filtrar un modelo vinculado a ContentType, ¿tal vez a través de una clave externa genérica? La pregunta aquí era para qué usar model_name
en:
content_type = ContentType.objects.get (model = model_name)
Usar Foo._meta.model_name
, o si tienes un Foo
objeto, entonces obj._meta.model_name
es lo que estás buscando. Entonces, puedes hacer cosas como
Bar.objects.filter(content_type__model=Foo._meta.model_name)
Ésta es una forma eficaz de filtrar Bar
tabla para devolverle los objetos que enlazan con el Foo
tipo de contenido a través de un campo llamado content_type
.