Ответ 1
Вы можете получить имя модели с объекта следующим образом:
self.__class__.__name__
Если вы предпочитаете тип контента, вы должны иметь возможность получить следующее:
ContentType.objects.get_for_model(self)
Скажем, я в коде сохранения. Как получить имя модели или тип содержимого объекта и использовать его?
from django.db import models
class Foo(models.Model):
...
def save(self):
I am here....I want to obtain the model_name or the content type of the object
Этот код работает, но я должен знать имя модели:
import django.db.models
from django.contrib.contenttypes.models import ContentType
content_type = ContentType.objects.get(model=model_name)
model = content_type.model_class()
Вы можете получить имя модели с объекта следующим образом:
self.__class__.__name__
Если вы предпочитаете тип контента, вы должны иметь возможность получить следующее:
ContentType.objects.get_for_model(self)
Метод get_for_model
делает некоторые причудливые вещи, но в некоторых случаях лучше не использовать эти причудливые вещи. В частности, скажем, вы хотели отфильтровать модель, связанную с ContentType, возможно, через общий внешний ключ?? Вопрос был в том, что использовать для model_name
в:
content_type = ContentType.objects.get (модель = имя_модели)
Используйте Foo._meta.model_name
или, если у вас есть объект Foo
, тогда obj._meta.model_name
- это то, что вы ищете. Затем вы можете делать такие вещи, как
Bar.objects.filter(content_type__model=Foo._meta.model_name)
Это эффективный способ фильтрации таблицы Bar
для возврата объектов, которые ссылаются на тип содержимого Foo
через поле с именем content_type
.