この記事では、管理サイトのインタフェースと、Django の admin テンプレートを使ってそれをどのように変更できるかについて学びます。
Django デフォルトの管理画面
Django のデフォルトの管理サイトは、以下のようなものです。
class SampleBookModel(models.Model):
Name = models.CharField(max_length = 80 )
Price = models.IntegerField()
Genre = models.CharField(max_length = 80 )
Description = models.TextField()
|
デフォルトのインタフェースは最小限の機能しかなく、ユーザフレンドリではあり ません。
しかし、 Django は独自の管理サイトインタフェースを作る方法を提供しています; それは Django ModelAdmin ライブラリを使うことです。
これから ModelAdmin を使って、どのように私たちのニーズに応じて管理ページを変更できるかを見てみましょう。
この記事もチェック:Djangoで管理画面を作る方法を詳しく解説していく
ModelAdmin ライブラリで Django の Admin インターフェイスをカスタマイズする
Model Admin を使うには、作業するためのいくつかのモデルテーブルが必要です。
そこで、簡単なモデルを紹介します。
from django.contrib import admin
|
この後の節では、このモデルの表示ページそのものを変更します。
Model Admin クラスの編集
モデル Admin は Django の admin ライブラリの一部です。
これを使うには、 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' : ( '<class_options' ,),
'fields' : ( '<model_fields>' )
})
)
|
モデル Admin クラスの基本的な構文は以下の通りです。
@admin .register(<Model_Name>)
|
では、個別に見ていきましょう
1. デコレーター
Pythonは既存のコードに機能を追加するために使用される、エキサイティングな機能デコレータを提供します。
これは@記号と一緒に使います。
これについては、Pythonのデコレータの記事で詳しく説明されています。
管理サイトのレジストリデコレータの基本的な構文は以下のとおりです。
admin.site.register(<Model_Name>, <Model_admin_class>) |
注意: ここでの機能は、この行のものと同じです。
fields = (( 'field1' , 'field2' ), 'field3' , 'field4' )
|
デコレータを使うのは、モデルを管理サイトに登録するためのもうひとつの方法です。
この場合、唯一の違いは、モデルとともにモデル管理クラスを引数として追加することです。
2. フィールド
フィールドは、ウェブページ上のモデルフィールドの順序と位置を指定します。
注:Input(fields)はタプルで指定する必要があります。
list_display = ( '<Heading1' , 'Heading2' )
|
2つのフィールドを同じレベルに表示するには、タプルの中にタプルとして追加します。
例えば 上記のコードでは フィールド1とフィールド2は同じレベルに表示され、フィールド3はその下に、フィールド4は最後に表示されます。
3. list_display
list_filter = ( '<filter-by:Field_Name>' ,)
|
上の例では、Webページには “Book Model “という見出しが1つだけ表示されています。
このように、より多くの列見出しを追加するには、list_display 属性を使用します。
注:入力(Column Headings)はタプルとして与えられるべきです。
list_displayのシンタックス。
ordering = ( '<Field_Name>' ,)
|
4. List Filter
DefaultインターフェイスはFilter-byオプションを提供しない。
しかし、 list_filter オプションを使って追加することができます。
Filter_byオプションを使用すると、Table要素をより速く検索することができます。
注:Inputはタプルで指定すること。
fieldsets = (
( 'Required information' ,{
'description' : '<' description_to_display>',
'fields' :( '<Field_Names' >)
}),
( 'Optional Information' ,{
'classes' : ( '<display_options>' ,),
'fields' : ( '<Field_Names>' )
})
)
|
5. オーダリング
ordering属性は、Table要素がウェブページに表示される順序を指定します。
注:入力はタプルとして与えられるべきです。
@admin .register(SampleBookModel)
class SampleAdminModel(admin.ModelAdmin):
fieldsets = (
( 'Required information' ,{
'description' : 'These fields are compulsory' ,
'fields' :(( 'Name' , 'Price' ), 'Genre' )
}),
( 'Optional Information' ,{
'classes' : ( 'collapse' ,),
'fields' : ( 'Description' ,)
})
)
list_display = ( 'Name' , 'Price' )
list_filter = ( 'Genre' ,)
ordering = ( 'Name' ,)
|
6. fieldsets
fieldsets属性は、fields属性と同じように、フィールドを表示する別の方法です。
多くのウェブサイトでは、情報はしばしばオプションの情報タグの下に表示され、”Click to View “オプションを押した後に見ることができます。
fieldsetsはまさにそれを実現するものです! 構文はタプルの中のPythonの辞書に似ています。
fieldsetsのシンタックスは以下の通りです。
以下は、あまり使われない Model Admin のアトリビュートです。
- empty_value_display
- exclude
- list_editable
- readonly_fields
Admin クラスを使った Django Admin テンプレートのフィールドのカスタマイジング
変数についての理解が深まったので、次は Admin Template 上のフロントエンドフィールドの変更に移りましょう。
前提条件のセクションで説明した SampleModel Django Admin Template の外観を変更します。
admins.py にコードを追加します。
このコードから、各要素がどこに表示されるかを推測してください。
あなたの推測が正しいかどうかは、次のセクションで見てみましょう。
この記事もチェック:Djangoのテンプレートの使い方|タグや変数、if,for文の使い方を解説する
Model Admin クラスの実装
正しく推測できましたか?出力結果を見てみましょう。
まとめ
コーダーの皆さん、以上です! 以上、Django Admin Templates と Model Admin クラスの使い方についてでした。
管理サイトについての詳細は、 Django Admin Site の記事を参照してください。
次の記事でお会いしましょう! Keep Coding !