I have a model with a generic relation:
TrackedItem --- genericrelation ---> any model
I would like to be able to generically get, from the initial model, the tracked item.
I should be able to do it on any model without modifying it.
To do that I need to get the content type and the object id. Getting the object id is easy since I have the model instance, but getting the content type is not: ContentType.object.filter requires the model (which is just content_object.__class__.__name__
) and the app_label.
I have no idea of how to get in a reliable way the app in which a model is.
For now I do app = content_object.__module__.split(".")[0]
, but it doesn't work with django contrib apps.
You can get both
app_label
andmodel
from your object using the built-in ContentType classThis is a better approach respect of using the
_meta
properties that are defined as private.You don't need to get the app or model just to get the contenttype - there's a handy method to do just that:
Despite the name, it works for both model classes and instances.
The
app_label
is available as an attribute on the_meta
attribute of any model.