Django には非常に強力な管理インターフェイスが付属しています。
これは models.py からモデルに関する情報を取得し、素早くシンプルなモデル中心 のインタフェースに戻すものです。
管理インターフェイスでは、ユーザは Model テーブルと対話し、要素の追加/削除などのタスクを非常に簡単かつ効率的に実行することができます。
また、Django は admin ライブラリにある Admin クラスモデルを使って、デフォルトの admin インターフェースを編集/変更する機会を与えてくれます。
この記事もチェック:Djangoのモデルの作成や取得、更新、削除について解説する
Django Admin サイトを始めよう
さて、Django の管理画面にアクセスする前に、スーパーユーザを作成する必要があり ます。
それでは、管理サイト用のスーパーユーザを作成する手順を説明します。
スーパーユーザーの作成
admin/ エンドポイント (ホストウェブサイト/admin) にアクセスしようとすると、ユーザー名とパスワードが要求されることがわかります。
このユーザー名とパスワードは、Web アプリケーションのスーパーユーザーのユーザー名とパスワードです。
python manage.py createsuperuser |
スーパーユーザーとは、サイトの最上位管理者のようなもので、以下のような用途があります。
- テーブルの削除、変更、新規要素の追加を行うための全権限を持ちます。
- スーパーユーザーと同様に新しいユーザーを作成し、これらのユーザーに異なるユーザー権限を割り当てることができます。
新しいスーパーユーザーを作成するために、シェルで以下のコードを記述します。
from django.contrib import admin
from .models import BookModel, AuthorModel
admin.site.register(BookModel) admin.site.register(AuthorModel) |
ユーザー名、メールアドレス、パスワードが要求されます。
詳細を入力すると、スーパーユーザーが作成されます。
manage.py runserver |
これで、作成したユーザー名とパスワードで管理サイト(/admin)にログインできるようになりました。
ログインすると、管理画面はこのようになります。
#Decorator @admin .register(BookModel)
class BookModelAdmin(admin.ModelAdmin):
#Fields
fields = ( '<model_field_names>' )
#List Display
list_display = ( '<model_field_names>' )
#List_filter
list_filter = ( '<model_field_names>' )
#ordering
ordering = ( '<model_field_names>' )
#fieldsets
fieldsets = (
( 'Required information' ,{
'description' : '<' description_sentence>',
'fields' :( '<model_fields' >)
}),
( 'Optional Information' ,{
'classes' : ( 'collapse' ,),
'fields' : ( '<model_fields>' )
})
)
|
2. 管理サイトにモデルを登録する
前の画像は、デフォルトの管理者インターフェースを示しています。
とりあえず、このインターフェース自体を操作して、このサイトにモデルを登録します。
そのためには、admin.pyに以下のように記述します。
admin.site.register(BookModel,BookModelAdmin) |
admin.site.register(,) – これは、括弧内のモデルを管理サイトに登録する関数で、そのため admin.site.register と名付けられました。
とりあえず、引数にはBookModelとAuthorModel本体を入れておきます。
第2引数の については、しばらくしてから学習します。
fields = (( 'title' , 'price' ), 'genre' , 'author_id' )
|
ファイルを変更すると、サーバーは自動で再起動するはずですが、もし再起動しない場合は、再度runserverコマンドを実行してください。
list_display = ( 'title' , 'price' )
|
list_filter = ( 'genre' ,)
|
これで、管理サイトに AuthorModel と同様に BookModel が表示されることが確認できます。
それでは、Web インターフェースからモデルを編集してみましょう。
Adminサイトによるモデルテーブル要素の編集
テーブルが登録されたので、新しい要素を追加したり、削除したり、編集したりすることができるようになりました。
1. 新しいオブジェクトを追加する
管理サイトで、著者モデルを選択し、右上に、新しいオブジェクトを追加するオプションが表示されます。
これをクリックすると、新しい著者モデルオブジェクトが追加されます。
ordering = ( 'title' ,)
|
同様に、テーブルの中に著者を追加してみましょう。
fieldsets = (
( 'Required information' ,{
'description' : '<' description_sentence>',
'fields' :( '<model_fields' >)
}),
( 'Optional Information' ,{
'classes' : ( 'collapse' ,),
'fields' : ( '<model_fields>' )
})
)
|
2. 既存のオブジェクトの編集/変更
以前に保存した要素を変更したい場合は、その要素をクリックすると、再び下の画面が表示されます。
編集後、「保存」をクリックすると、新しい値が保存されます。
@admin .register(BookModel)
class BookModelAdmin(admin.ModelAdmin):
fields = (( 'title' , 'price' ), 'genre' , 'author_id' )
list_display = ( 'title' , 'price' )
list_filter = ( 'genre' ,)
ordering = ( 'title' ,)
|
ここでは、編集したオブジェクトを保存するために使用される、保存と編集の継続、または保存オプションが表示されます。
3. オブジェクトの削除
削除したい要素をクリックすると、以下の画面が表示されます。
削除したい項目の下に赤色で削除ボタンが表示されますので、クリックすると削除されます。
@admin .register(AuthorModel)
class AuthorModelAdmin(admin.ModelAdmin):
fieldsets = (
( 'Required information' ,{
'description' : 'These fields are compulsory' ,
'fields' :( 'first_name' ,)
}),
( 'Optional Information' ,{
'classes' : ( 'collapse' ,),
'fields' : ( 'last_name' ,)
})
)
list_display = ( 'first_name' , 'last_name' )
ordering = ( 'first_name' ,)
|
管理画面のテーブルから要素を追加・変更するのがいかに簡単かをご覧ください(Pythonシェルで遠回りするのに比べたら!)。
Django の管理インターフェースで外部キーリンクする
前回の記事では、外部キーを使って 2 つの Django モデルをリンクさせる方法を見ました。
さて、管理セクションの >> AuthorModel に行くと、3人の著者を追加したことがわかります。
さて、BookModel テーブルで、新しい本を追加しようとすると、 author_id フィールドに author_id のドロップダウンリストが表示されるようになります。
これは外部キーのリンクにより、AuthorModel のリストから著者を簡単に選択できるようになったためです。
全ての本の著者名を何度も追加するのではなく、2つのモデル(BookModelとAuthorModel)をリンクさせ、ドロップダウンリストから選択することができるのです。
では、各著者の本をいくつか追加してみましょう。
ここでは、Ghostbuster と Harry Potter の両方に著者 1 を選択し、プログラミングチュートリアルに著者 2 を選択しています。
さて、外部キーのもうひとつの機能を見てみましょう。
例えば、著者1が自分のアカウントを削除することに決めたので、AuthorModelから著者1のアカウントを削除するとします。
AuthorModel から著者1を削除
ここで、BookModel に移動すると、著者1が書いたすべての本が自動的に削除されていることがわかります。
これがFKを使うメリットです。
インターフェースビューを変更する
デフォルトのインターフェイスがどのように動作するかがわかったので、admin Models を使ってこのインターフェイスのいくつかの側面を変更してみましょう。
構文は
以下、各要素を一つずつ見ていきましょう。
1. デコレータ
最初の行 admin.register(BookModel) は、レジスターと呼ばれ、適用するクラスの前に @ 記号を付けて使用します。
その機能は、admin.site.registerと同様です。
これは、adminModelと一緒にモデルを登録する方法が違うだけです。
しかし、これを使いたくない場合は、先に述べた方法を使って管理モデルを追加する必要があります。
2. フィールド
このオプションでは、モデルフィールドを管理画面に表示する順番と位置を設定できます。
注:このオプションは(フィールドの)入力をタプルとして受け取ります。
ここでは、フィールドを表示させる順番を見ることができます。
もし、複数のフィールドを同じ水平レベルに表示させたい場合は、それらのフィールドをタプルとして一緒に追加します。
3. List ↵ Display
さて、画像を見ていただくと、「Book Model」という見出しが1つだけありますね。
もし、別の見出しを表示させたい場合は、list_displayというオプションを使用します。
したがって、このオプションは、上記のページで表示するすべてのフィールドを選択することができます。
Note: このオプションは入力をタプルで受け取ります。
リスト
見ての通り、デフォルトのインターフェースでは、filter-byオプションはない。
list_filterを使用すると、上のようなページにfilter-byオプションが作成されます。
これにより、テーブルの中の特定の要素を素早く検索することができます。
注:このオプションは入力をタプルで受け取る。
5. 順序付け
Django Models で見た MetaClass と同じように、ここでの ordering も同じ機能を持っています。
特定のフィールドの要素が表示される順番を指定することができます。
構文は MetaClass モデルでの順序指定と似ています。
Note : このオプションはタプルとして入力を受け取ります。
この記事もチェック:Djangoで入力フォームを作ってユーザーの入力を受け付ける方法
6. フィールドセット
これは、上で見たフィールドについて言及する別の方法です。
多くのWebサイトで見られるように、「もっと見る」ボタンをクリックすると表示されるオプションの情報があります。
フィールドセットも同じように、いくつかのフィールドをオプションにし、いくつかのフィールドを必須にすることができます。
この構文は少しわかりにくいので、以下のコードを理解するようにしてください。
他にも似たような管理オプションがたくさんあり、管理ライブラリで使用できます。
- Empty_value_display
- 除外
- list
- readonly_fields
では、BookModel と AuthorModel の両方の管理画面を変更してみましょう。
管理サイトのBookModelビューを変更する
管理画面の様々なオプションを使って、BookModel の外観を変更してみましょう。
注:単一の値のタプルの場合、Python にタプルであることを示すために、最後にカンマ記号 “,” を入れる必要があります。
ここでは
- タイトルと価格を同じ水平レベルにしています。
- タイトルと価格の両方をリスト表示します。
- ジャンルによる絞り込み
- タイトルに応じたアルファベット順の要素表示
では、サーバーを起動して確認してみましょう。
管理サイトのAuthorModelビューを変更する
同様に、上記で学んだ管理者用オプションを使って、AuthorModelの外観を変更してみましょう。
ここで
- 姓は必須項目で使用されます。
- 姓はオプションで使用します。
- 姓と名の両方をリスト表示します。
- 姓のアルファベット順の表示
では、サーバーを起動して確認してみましょう。
Django の管理サイトにおけるその他のオプション
Django の管理サイトのトップページには、ユーザやグループなどの他のオプショ ンが既に存在しています。
Users オプションは、スーパーユーザを扱ったり、各ユーザのパーミッションを扱ったりするために使われます。
画面に表示されるすべての要素はクリック可能で、ユーザーのパーミッションをクリックすることで編集でき、パーミッションのセットを変更することができます。
まとめ
以上、皆さん。
この記事はこれで終わりです。
次の節では、テンプレートについて学びます。
次の数日間で Django と Flask の記事をもっとたくさん書くので、楽しみにしていてください。
</model