【Django】管理画面のカスタマイズ

# はじめに
最近、業務でDjangoに触れる機会があったので、
その時に調べた内容を随時更新していこうと思います。

完全に自分用の記事なので多くは求めないで下さい。

**・前提**
管理画面にログインできる状態
models.pyに記述しmigrateが済んでいる

# models.pyの内容
今回の`models.py`の内容は下記になります。

```models.py
from django.db import models

class User(models.Model):
    name = models.CharField("名前", max_length=32)
    mail = models.EmailField()

    def __str__(self):
        return self.name

class Entry(models.Model):
    STATUS_DRAFT = "draft"
    STATUS_PUBLIC = "public"
    STATUS_SET = (
        (STATUS_DRAFT, "下書き"),
        (STATUS_PUBLIC, "公開"),
    )

    title = models.CharField("タイトル", max_length=128)
    body = models.TextField("本文")
    created_at = models.DateTimeField("作成日", auto_now_add=True)
    updated_at = models.DateTimeField("更新日", auto_now=True)
    status = models.CharField("公開ステータス", choices=STATUS_SET, default=STATUS_DRAFT, max_length=8)
    author = models.ForeignKey(User, related_name="entries", verbose_name="ユーザ", on_delete=models.CASCADE)

    def __str__(self):
        return self.title
```

では、この状態でどのような記述をしていけば
管理画面がカスタマイズされるかを書いていきます。

#管理画面カスタマイズ
`python3 manage.py startapp <アプリ名>`で定義したアプリ配下に存在する、
`admin.py`で基本的に設定を行なっていきます。

ページ内リンクを貼りましたので、お探しのものを選択して下さい。

- [管理画面に表示する](#管理画面に表示する)
- [編集画面に表示させるitemをカスタマイズ](#編集画面に表示させるitemをカスタマイズ)
- [選択画面に複数の項目を表示する](#選択画面に複数の項目を表示する)

##管理画面に表示する
最初の状態では管理画面に作成したModelが表示されていないので、
それを表示するために下記を記述する必要があります。

```admin.py
from django.contrib import admin
from .models import User, Entry


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    pass

@admin.register(Entry)
class EntryAdmin(admin.ModelAdmin):
    pass
```

`@admin.register(　)`の`(　)内`は　モデル名を記述して下さい。
また、記述するためにはモデルをインポートする必要があります。

[リストに戻る](#管理画面カスタマイズ)

##編集画面に表示させるitemをカスタマイズ
編集画面に遷移するとデフォルトでは編集可能な全てのfieldが表示されます。
![スクリーンショット 2021-06-23 18.45.09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/c2261a36-a0de-bd10-31d2-ce9d943edcd1.jpeg)

この中で、タイトルと本文のみ表示したい場合は下記のように記述します。

```admin.py
from django.contrib import admin
from .models import User, Entry


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    model = User
    fields = ["name", "mail"]

@admin.register(Entry)
class EntryAdmin(admin.ModelAdmin):
    model = Entry
    fields = ["title", "body"]
```
fieldsの内容を編集すれば表示項目が変更されます。

すると画像のようになります。表示内容が減りました。
![スクリーンショット 2021-06-23 18.47.45.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/25ab89dd-2ba6-e63b-f2ec-c6a9bc88b97f.jpeg)
[リストに戻る](#管理画面カスタマイズ)

##選択画面に複数の項目を表示する
Entry内のitemを選択する画面で、デフォルトではタイトルのみ表示されています。
![スクリーンショット 2021-06-23 18.50.38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/9f512c0b-ee86-2326-1a45-17c7f00dbf08.jpeg)

この画面上でタイトルだけでなく、
本文や作成者を表示したい！という場合は下記のように記述します。

```admin.py
from django.contrib import admin
from .models import User, Entry


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    model = User
    list_display = ["name", "mail"]

@admin.register(Entry)
class EntryAdmin(admin.ModelAdmin):
    model = Entry
    list_display = ["title", "body", "status", "author"]
```

list_displayを編集すれば表示項目が変更されます。

記述後は画像のようになります。
![スクリーンショット 2021-06-23 18.50.51.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797483/ddc6f05a-308c-69fa-cf85-b50ec760bc32.jpeg)
[リストに戻る](#管理画面カスタマイズ)


#さいごに
以上になります。

まだ少し触れただけなので項目が少ないですが、
新しい知識が増えたらこちらの記事を更新していきますので是非ご覧ください。