Generic Foreign Keyで使われるContent TypeのIDを取得する
Content TypeのIDを取得したいと思った経緯
Generic Foreign Keyを使ってwebアプリケーションの通知機能を実装した。 詳しくは、各モデルのインスタンスが生成されるたびに、シグナルを通じて、通知モデルのインスタンスが生成される。 そしてこの通知モデルインスタンスを一覧してユーザに通知させる仕組みである。
この通知は特に各モデルのインスタンス情報は必要ない。単純に通知モデルのインスタンスがどのモデル(Content Type)か、通知モデルのインスタンスがどのモデルの主キー(objectId)かだけがわかれば済む話なのである。
もしモデルのうちどのオブジェクトかの情報を取得したい場合は、DRFかDjangoによってデータの取り出し方が変わってくる。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