Let\'s say I am in the save code. How can I obtain the model\'s name or the content type of the object, and use it?
from django.db import models
class Foo(model
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)
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
.