short_description
モデル定義の目的のラベルに呼び出される関数に属性を設定します。
# note, this must be done in the class definition;
# not User.get_full_name.short_description
get_full_name.short_description = 'my label'
または、管理者固有のコードでモデルを汚染したくない場合は、インスタンスという1つの引数を取るlist_display
メソッドに設定できます。また、管理者がモデルでこのフィールドを検索しようとしないようModelAdmin
に設定する必要があります。readonly_fields
区別するために、管理フィールドの前に接頭辞を付け_
ます。
class MyAdmin(...):
list_display = ('_my_field',)
readonly_fields = ('_my_field', )
def _my_field(self, obj):
return obj.get_full_name()
_my_field.short_description = 'my custom label'
アップデート:
これにより、デフォルトの管理者の順序が崩れることに注意してください。管理者は、ラベルをクリックしてフィールドを並べ替えることはなくなります。この機能を再度有効にするには、を定義しadmin_order_field
ます。
def _date_created(self, obj):
return obj.date_created.strftime('%m/%d/%Y')
_date_created.short_description = "Date Created"
_date_created.admin_order_field = 'date_created'
アップデート2:
このプロセスを単純化するadminメソッドデコレータを作成しました。これは、非常にわかりやすい詳細なメソッド名を使い始めると、関数の属性の設定が非常に反復的で雑然としたものになるためです。
def admin_method_attributes(**outer_kwargs):
""" Wrap an admin method with passed arguments as attributes and values.
DRY way of extremely common admin manipulation such as setting short_description, allow_tags, etc.
"""
def method_decorator(func):
for kw, arg in outer_kwargs.items():
setattr(func, kw, arg)
return func
return method_decorator
# usage
class ModelAdmin(admin.ModelAdmin):
@admin_method_attributes(short_description='Some Short Description', allow_tags=True)
def my_admin_method(self, obj):
return '''<em>obj.id</em>'''