111👍
You can get the model name from the object like this:
self.__class__.__name__
If you prefer the content type, you should be able to get that like this:
from django.contrib.contenttypes.models import ContentType
ContentType.objects.get_for_model(self)
11👍
The method get_for_model
does some fancy stuff, but there are some cases when it’s better to not use that fancy stuff. In particular, say you wanted to filter a model that linked to ContentType, maybe via a generic foreign key?? The question here was what to use for model_name
in:
content_type = ContentType.objects.get(model=model_name)
Use Foo._meta.model_name
, or if you have a Foo
object, then obj._meta.model_name
is what you’re looking for. Then, you can do things like
Bar.objects.filter(content_type__model=Foo._meta.model_name)
This is an efficient way to filter the Bar
table to return you objects which link to the Foo
content type via a field named content_type
.
- [Django]-Why won't Django use IPython?
- [Django]-Django – How to make a variable available to all templates?
- [Django]-Get protocol + host name from URL
4👍
Using gravelpot’s answer, to give a direct answer to the OP’s question:
We can get the object’s class through instance.__class__
and then pass it to the get_for_model
function:
from django.contrib.contenttypes.models import ContentType
content_type = ContentType.objects.get_for_model(instance.__class__)
- [Django]-How to get superuser details in Django?
- [Django]-How can one use enums as a choice field in a Django model?
- [Django]-(13: Permission denied) while connecting to upstream:[nginx]