保存コードにいるとしましょう。モデルの名前またはオブジェクトのコンテンツタイプを取得して使用するにはどうすればよいですか?
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
このコードは機能しますが、model_nameを知っている必要があります。
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(model = model_name)
Foo._meta.model_name
を使用するか、Foo
オブジェクトがある場合は、obj._meta.model_name
が目的のオブジェクトです。その後、次のようなことができます
Bar.objects.filter(content_type__model=Foo._meta.model_name)
これは、Bar
テーブルをフィルタリングして、content_type
というフィールドを介してFoo
コンテンツタイプにリンクするオブジェクトを返す効率的な方法です。