te-touのブログ

音楽制作・車・プログラミング・旅行・その他考えてる事など、備忘録的なことも含めて個人的なページです。

ウェブアプリを作る。7(Djangoのadmin画面作ってテスト入力)




前回、Djangoでモデル(データベース定義?)を作成して、マイグレーションを行いました。
余談ですが、マイグレーションていうのはマッピングと同じような意味合いですかね?
カタカナ言葉が多すぎてよくわかりません。
www.te-tou.tokyo

作成したテーブルに画面から入力テストをしてみました。

admin画面作成

ログインを兼ねた、管理画面を作ります。
admin.pyというファイルを探して、インポート含めて2行書けば画面が出来上がります。

from django.contrib import admin
from shinsa.models import Testee
# Register your models here.

admin.site.register(Testee)
superUser作成

ログイン画面だけ作ってもログイン出来ないので、ターミナルからコマンドでユーザーを作成します。
プロジェクトフォルダに移動して、ちゃんとactivateしてから下記のコマンドを打ちます。
(アクティベートの参考記事)
www.te-tou.tokyo

> manage.py createsuperuser 

表示に従って、名前とかパスワードを入れます。(メールアドレスは特に必要ないらしい)
これで、ログインできるようになりました。

テスト入力

サーバーを起動します。
(サーバー起動参考記事)
www.te-tou.tokyo

先ほどのユーザーIDとパスワードでログインして、
admin画面です。
f:id:te-tou:20200226020538p:plain
いい感じ。



で、試しに入力してみると。
f:id:te-tou:20200226020714p:plain
「受審者」という項目は上手く出来ています。
しかし、「段位」としたかった箇所が「grade_id」。しかも、一桁でいいのに無限(integer分?)に桁数入力が出来てしまいます。

単純に設計ミスですね。
ざっくり命取りです。
元はのソースコードは、

from django.db import models

# Create your models here.
# 受審者テーブル
class Testee(models.Model):
    # testee_id = models.IntegerField()
    testee_name = models.CharField(
        max_length=30,
        verbose_name='受審者'
        )
    grade_id = models.IntegerField()

そりゃそうだわ。ってくらいの感じです。
相手が新人なら、そこそこネチネチ説教するレベルのポカしです。

ソースコード修正。

from django.db import models

# Create your models here.
# 受審者テーブル
class Testee(models.Model):
        GRADE_CHOICES = (
            (1, "初段"),
            (2, "二段"),
            (3, "三段"),
            (4, "四段"),
            (5, "五段"),
            (6, "六段"),
            (7, "練士"),
            (8, "七段"),
            (9, "教士"),
        )
    # testee_id = models.IntegerField()
    testee_name = models.CharField(
        max_length=30,
        verbose_name='受審者'
        )
    grade_id = models.CharField(
        max_length=4,
        verbose_name='段位',
        choices=GRADE_CHOICES
        )

段位をリストから選択できるようにしてみました。
当初の設計思想からはやや外れてきましたが、まあいいかと。SE失格の判断ですが、気楽にやります。

結果。
f:id:te-tou:20200226022156p:plain
上手く動きました。


もはやSQLの知識要らずレベルで簡単に作成出来ます。