Dockerで始めるDjango生活(4日目)

### 初めに
4日目です。
3日目は[こちら](https://qiita.com/ghayato/private/6234f74776c0e2413b97)
前回はblogアプリを有効化した所で終わっていました。
管理サイトを作成します。
### 目次
1. スーパーユーザーを作成する
2. 管理サイトにログインする
3. 管理サイトにblogアプリを追加する
4. blogアプリを使って投稿してみる
5. 投稿完了後画面の表示を増やす
6. 投稿完了後画面をカスタマイズする
7. 最後に

## 1. スーパーユーザーを作成する
管理サイトを作成するにあたって、スーパーユーザーを作成する必要があります。

```
# cd /root/projects/myproject/myproject
# pwd
/root/projects/myproject/myproject
# ls
blog  db.sqlite3  manage.py  myproject
# python3 manage.py createsuperuser
ユーザー名 (leave blank to use 'root'): admin
メールアドレス: admin@admin.com
Password:
Password (again):
Superuser created successfully.
#
```

## 2. 管理サイトにログインする
ますは、
http://127.0.0.1:8000/admin
にアクセスします。
すると下の画像のような画面が表示されると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895676/a2739ed8-c235-3e5f-ecc6-99b18d74fca5.png)
先程作成したスーパーユーザーでログインします。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895676/1bf9a191-f81b-a0c0-3e22-398c13a2e8fc.png)
すると管理画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895676/730b6719-1f97-1f82-5388-d453971af520.png)

## 3. 管理サイトにblogアプリを追加する
管理サイトにblogアプリを追加するにはblogディレクトリのadmin.pyを修正する必要があります。

```
# cd /root/projects/myproject/myproject/blog
# pwd
/root/projects/myproject/myproject/blog
# ls
__init__.py  __pycache__  admin.py  apps.py  migrations  models.py  tests.py  views.py
#
```
``` admin.py(修正前)
from django.contrib import admin

# Register your models here.
```
``` admin.py(修正後)
from django.contrib import admin
from .models import Post
# Register your models here.
admin.site.register(Post)
```
再度管理サイトを表示すると下の様にblogアプリが追加されているかと思います。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895676/40701541-1d69-19b8-6587-5e4ac81cb9be.png)

## 4. blogアプリを使って投稿してみる
まずは、Postsの欄にある、「+追加」をクリックします。
すると投稿画面に遷移します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895676/8d0e2a9e-ca85-363b-2356-62755c359058.png)
適当に入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895676/a1d5a5f1-c2c1-f93b-68c9-273c0ae4b978.png)
ここで保存を押すと下記のページに遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895676/9dff243a-3886-8fcd-4053-e03cf50c4815.png)
これで投稿は完了です！
ただ、この画面でタイトル以外にも誰が投稿したかなども知りたいですよね。

## 5. 投稿完了後画面の表示を増やす
まずは、admin.pyを修正します。

``` admin.py(修正前)
from django.contrib import admin
from .models import Post
# Register your models here.
admin.site.register(Post)
```
``` admin.py(修正後)
from django.contrib import admin
from .models import Post
# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status')
```
再度画面を表示します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895676/6df9b3a1-189a-f769-5de2-6f0e8f9da2f0.png)
画面に投稿者などが表示されました。

## 6. 投稿完了後画面をカスタマイズする
5で表示された内容にフィルターなどを追加してみようと思います。

``` admin.py(修正前)
from django.contrib import admin
from .models import Post
# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status')
```
``` admin.py(修正後)
from django.contrib import admin
from .models import Post
# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status')
    list_filter = ('status', 'created', 'publish', 'author')
    search_fields = ('title', 'body')
    prepopulated_fields = {'slug': ('title',)}
    raw_id_fields = ('author',)
    date_hierarchy = 'publish'
    ordering = ('status', 'publish')
```
では、画面を再度表示すると下の様になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895676/afee2ed4-c559-81e3-8a44-0c8c9d0d0b6a.png)

## 7. 最後に
今回は管理画面を表示して実際にblogアプリを通して投稿などができるようにしました。
この記事では下記の本を参考に書かせていただいています。
この記事ではDjangoを実際に触って動かすことをメインに書いていますので上記のマイグレーションの詳しい説明などはこの本を読んでただければと思います。
[Django 3 By Example - Third Edition](https://www.packtpub.com/product/django-3-by-example-third-edition/9781838981952)