diadia

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

django contenttypesフレームワークについて

contenttypesのドキュメントの理解をしてみる

djangoのシグナルを学習しているうちにcontenttypeを用いる可能性が出てきたのでドキュメントを読んで見る。

https://docs.djangoproject.com/ja/2.1/ref/contrib/contenttypes/

まずcontenttypesって言葉は?

この言葉はdjangoのみで使われる特殊な言葉かIT業界で一般に使われる言葉なのか?これが引っかかった。djangoを除いてcontenttypeと検索すると以下のように、ファイルの種類を表す概念だとわかる。
参照: https://qiita.com/AkihiroTakamura/items/b93fbe511465f52bffaa
したがってdjangoにおけるcontenttypeはdjango特有の概念であり、言葉である。

contenttypesについて

簡単なイメージはこうである。djangoにはContentTypeモデルが存在する。(django.contrib.contenttypes.models.ContentType)
このContentTypeモデルのインスタンスはprojectで作成したモデルの情報を貯えたりそのモデルを表す。そしてこのインスタンスはprojectのモデルを返してくれたり、モデルのインスタンスを返してくれたりする機能を持つ。

It's generally a good idea to have the contenttypes framework installed; several of Django's other bundled applications require it: The admin application uses it to log the history of each object added or changed through the admin interface. Django's authentication framework uses it to tie user permissions to specific models.

上記のようなことがdjango contenttypesを使うことで実現してほしい内容のようだ。

セットアップ

https://docs.djangoproject.com/ja/2.1/ref/contrib/contenttypes/#installing-the-contenttypes-framework
contenttypesはdjango-admin startproject **コマンドを打ち込んだら自動的にsettings.pyのINSTALLED_APPSのリストに加えられる。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',  #コレ
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',

INSTALLED‗APPSから消した場合でも'django.contrib.contenttypes'を付け加えればcontenttypesを使うことができる。