【Django】007. 管理ツール＋管理画面でのデータベースCRUD

前回はモデルを作成し、マイグレーションによりテーブルの準備を行いました。
[前回記事：【Django】006. データベース0歩目](https://qiita.com/ys_dirard/items/dadf70c14d9829859845)

まだ作成したのみなのでテーブルにレコードは何も入っていません。

今回は管理ツールを使ってダミーのデータをいくつか準備することが目標です。

今回も以下の本を参考にしています。

https://www.shuwasystem.co.jp/book/9784798062419.html


## 管理者の作成
以下のコマンドで管理者を登録します。
```sh
python manage.py createsuperuser
```
コマンドを実行すると以下のように聞かれるので順番に入力します。
```text
Username (leave blank to use 'xxx'):
Email address:
Password:
Password (again):
Superuser created successfully.
```

## モデルの登録
作成したモデルを管理ツールで利用できるようにするには設定が必要。

アプリケーションの```admin.py```を編集します。
もともとは以下のようになっています。
```python
from django.contrib import admin

# Register your models here.

```
これを以下に変更します。
```python
from django.contrib import admin
from .models import Friend

admin.site.register(Friend)

```

ここでは前回作成したFriendモデルを追加しています。
参考までに前回作成したFriendモデルを再掲しておきます。
```python
class Friend(models.Model):
    name = models.CharField(max_length=100)
    mail = models.EmailField(max_length=200)
    age = models.IntegerField(default=0)
    birthday = models.DateField()
    
    def __str__(self):
        return '<Friend:id=' + str(self.id) + ', ' + \
            self.name + '(' + str(self.age) + ')>'

```

## 管理ツールへのログイン
管理ツールはDjangoのWebアプリとして準備されています。
```sh
python manage.py runserver
```
でサーバーを起動し、
```http://localhost:8000/admin```
にアクセスします。

※```http://127.0.0.1:8000/admin```でも可。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/bdc9c9fb-a286-5f4a-eddd-ce197ec3a508.png)

アクセスすると上記の画面となります。
先ほど管理者登録したユーザー名とパスワードを入力してログインします。

## 管理ツール画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/904a75fb-ff07-9cbb-38f8-74739296fd46.png)

管理ツール画面は上記のようになっています。

* 上部のリスト
「AUTHENTICATION AND AUTHORIZATION」と表示されているリストのことです。
これは管理ツールであるadminアプリケーションが使用しているモデルです。
「Groups」と「Users」というモデルが用意されています。

* 下部のリスト
「HELLO」と表示されているリストのことです。
これはhelloアプリケーション(以前作成したアプリケーション)に用意されているモデルの一覧で、現在はFriendモデルのテーブルに対応する「Friends」だけが表示されています。

* 右側のリンク
「Recent Actions」には最近移動したページへのリンクが表示されます。

## テーブルの編集
先ほどの画面の「Friends」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/25d4bd1b-b866-2d1a-7c93-39984a5f7683.png)
さらに右端の「ADD FRIEND」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/ce8fa758-c507-9dd1-f0a2-6ff907d1fd00.png)
必要な情報を入力して、下にある「SAVE」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/7bfab17e-ad0a-2869-93b1-83495a11a2ab.png)
レコードが追加されていることが確認できます。
ここで表示されている```<Friend:id=1, taro(20)>```はFriendクラスに実装した```__str__```メソッドの形式になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/65ca3408-948c-416b-6ef5-e0462a37f58e.png)
レコードを再度クリックすることで編集、削除も行えます。

## 利用者の管理ページ
「AUTHENTICATION AND AUTHORIZATION」の方のリストにある「Users」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/e8d304ea-f136-c309-6506-2d7cf34f3541.png)
現在は作成した管理者(superuser)のみが表示されています。
※白く塗りつぶしている箇所

##　利用者の追加
右上の「ADD USER」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/e03a9f5c-3e73-5cff-9ca0-0af054cb02d0.png)
必要な情報を入力して「SAVE」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/3af25526-9c38-09db-5776-d6ddc762f6b0.png)
「SAVE」をクリックするとさらに追加の設定を行うページに移動します。(画像は一部のみ表示)

項目は
* Change user
利用者名とパスワード(パスワードは変更不可)
* Personal info
利用者の個人情報(氏名、メールアドレス)
* Permissions
アクセス権に関するもの、staff / superuser / groups / user permission(個別設定)を設定可能
* Important dates
利用者を追加した日時と最終ログイン日時

適当に入力して「SAVE」をクリックすると以下のように無事にユーザーが追加されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594896/4184cede-b61a-15f2-442c-08232b49c8d2.png)