Подтвердить что ты не робот

Как получить имя модели или тип содержимого объекта Django?

Скажем, я в коде сохранения. Как получить имя модели или тип содержимого объекта и использовать его?

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()
4b9b3361

Ответ 1

Вы можете получить имя модели с объекта следующим образом:

self.__class__.__name__

Если вы предпочитаете тип контента, вы должны иметь возможность получить следующее:

ContentType.objects.get_for_model(self)

Ответ 2

Метод 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.