その1モデルの定義、管理サイトの表示(Django)DjangoPythonDjangoで簡単な投票アプリを作成します。管理サイトに投票モデル追加オブジェクト名のカスタマイズ投票アプリWebサイトのページから投票できる簡単な投票アプリを作成します。今回は、QuestionテーブルとChoiceテーブルを設定しています。Djangoのプロジェクトを作成済み。仕様Webページにボタン等のフォームを配置します。ユーザが入力を終え、送信ボタンをクリックしたタイミングでモデル(テーブル)への登録処理を行います。当サイトでは、Vagrantでゲスト環境(仮想環境)を作ってDjangoを動かいていますが、それ以外の環境でも操作方法はだいたい同じです。1Djangoプロジェクトを生成します。プロジェクト生成)2Djangoアプリケーションを作ります。7.1.1503pyenv1.1.3-5-g7dae197Anaconda3-4.3.0MariaDB5.5.52-1.el7Apache2.4.6mod_wsgi4.5.14Django1.11.3投票アプリ概要1以下のようなDjangoアプリ構成を作ります。プロジェクト名が「pj1」で、アプリケーション名が「users」です。プロジェクトの設定は済ませたものとします。赤字のファイルは、今回変更する部分です。pj1/pj1/__init__.pysettings.pyurls.pywsgi.pyusers/__init__.pyadmin.pyapps.pyurls.pyviews.pymodels.pytemplates/アプリケーションの追加startappでアプリを追加しただけではそのアプリケーションは有効化されません。「pj1/settings.py」の中に使用するアプリ一覧の項目があるので,そこに作成したアプリをINSTALLED_APPSという名前のタプルに追加します。これを追加)投票アプリのモデル定義1投票アプリのモデルを定義します。「users/models.py」に以下の記述をします。models.IntegerField(default=0)ForeignKeyは、他モデルへのリレーションを表現します。カラム型はリレーションを貼ったモデルの主キーと同じ型になり、カラム名はプロパティ名に「_id」が追加されたものになります。今回の例では、question_idという名前のinteger型のカラムが作成されます。(デフォルトの主キーがinteger型のため)デフォルトではappname_modelnameのテーブルが作成されます。users_choiceのテーブルが作成されます。特別な理由がない限りテーブル名の変更はオススメしません。以下のようにすれば、テーブル名等を変更できます。'users_question'2migrationファイルを作成します。choice3migrateコマンドを実行することでdatabaseに設定が反映されます。自前のモデル(Choice、Question)を表示させます。1管理サイトに表示するモデルの設定やカスタマイズは、「app/admin.py」に記述します。今回はチュートリアルにならってusersアプリのQuestionモデルを追加します。Questionadmin.site.register(Question)2簡易サーバを起動します。0.0.0.0:80003以下のURLをブラウザから開いて、Djangoの管理サイトを表示します。→http://localhost:8000/admin/以下のように「Questions」が表示されます。※Categorys、Postsなどのモデルは今回追加していません。4「Questions」→「QUESTIONを追加する」を押すとデータ追加用のフォームが表示されます。以下のようにテストデータを入力して保存します。5以下のような結果が表示されます。objectというデータが1つできます。objectが2つ表示されます。オブジェクト名のカスタマイズこのままだとなんのデータかわかりません。objectを表す文字列を変更します。1変更したいモデルの「__str__」メソッド(python2系の場合は__unicode__)をオーバーライドします。self.question_text以下のように表示が変わります。2モデル名をカスタマイズします。モデル自体を表す文字列(この場合はQuestion)を変えたい場合は、Metaクラスで設定します。self.question_textverbose_nameそのモデルを表す名前。verbose_name_pluralそのモデルの複数形を表す名前を設定。以下のように表示が変わります。Questionが「質問」、Questionsが「質問の複数形」に変わってるのを確認してください。