diadia

興味があることをやってみる。自分のメモを残しておきます。

Generic Foreign Keyで使われるContent TypeのIDを取得する

Content TypeのIDを取得したいと思った経緯

Generic Foreign Keyを使ってwebアプリケーションの通知機能を実装した。 詳しくは、各モデルのインスタンスが生成されるたびに、シグナルを通じて、通知モデルのインスタンスが生成される。 そしてこの通知モデルインスタンスを一覧してユーザに通知させる仕組みである。

この通知は特に各モデルのインスタンス情報は必要ない。単純に通知モデルのインスタンスがどのモデル(Content Type)か、通知モデルのインスタンスがどのモデルの主キー(objectId)かだけがわかれば済む話なのである。
もしモデルのうちどのオブジェクトかの情報を取得したい場合は、DRFDjangoによってデータの取り出し方が変わってくる。DRFではserializers.RelatedFieldを利用する。

IDを取得する

from django.contrib.contenttypes.models import ContentType

contentTypeId = ContentType.objects.get(model='book').id

ModelはBookのようにクラスを定義するけど、引数として記述する場合は'book'とする必要がある。

関連記事: DRFでGeneric ForeignKey を扱う - diadia

参考

Get ContentType id in Django for generic relation - Stack Overflow
The contenttypes framework | Django documentation | Django