Djangoadminsite(一)ModelAdminOptions

黄舟
リリース: 2016-12-23 17:44:11
オリジナル
1304 人が閲覧しました

管理者管理インターフェイスは Django のキラー アプリケーションです。スキーマ内のメタデータを読み取り、Web サイト管理者がコンテンツを Web サイトに即座に追加できる強力で使いやすいインターフェイスを提供します。

管理者を使用するには、以下の手順に従ってください:

設定の INSTALLED_APPS 構成に「django.contrib.admin」を追加します。

INSTALLED_APPS に「django.contrib.auth」、「django.contrib.contenttypes」、「django.contrib.messages」、「django.contrib.sessions」が含まれていることを確認してください。Django の管理者にはこれら 4 つのパッケージが必要です。

「django.contrib.messages.context_PROcessors.messages」を TEMPLATE_CONTEXT_PROCESSORS に追加し、MIDDLEWARE_CLASSES に「django.contrib.auth.middleware.AuthenticationMiddleware」と「django.contrib.messages.middleware.MessageMiddleware」が含まれていることを確認します。 (デフォルトで追加)

どのモデルを管理者に適用する必要があるかを決定します。

管理者を必要とする各アプリの admin.py に ModelAdmin を作成します。

ModelとModelAdminを登録します

from django.contrib import admin
from myproject.myapp.models import Author

class AuthorAdmin(admin.ModelAdmin):
pass
admin.site.register(Author, AuthorAdmin)

は管理者アクセスの設定は URLconf にあります

from django.contrib import admin
admin.autodiscover()

# そして、この URLpattern を含めます...
urlpatterns = pattern('',
# ...
(r'^ admin/ ', include(admin.site.urls)),
# ...
)

python manage.py merge を実行すると、スーパーユーザーを作成するよう通知され、http://127.0.0.1:8000/ にアクセスできるようになります。管理者/。

ModelAdminオブジェクト

レジスタデコレーター

register(*models[, site=django.admin.sites.site])

1.7で新しく追加されました。 Model と ModelAdmin は次のように登録できます:

from django.contrib import admin
from .models import Author

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
pass

複数登録できますモデルを一度に作成し、独自にカスタマイズした AdminSite を使用できます:

from django.contrib import admin
from .models import Author, Reader, Editor
from myproject.admin_site import custom_admin_site

@admin.register(Author, Reader, Editor, site=custom_admin_site )
class PersonAdmin(admin.ModelAdmin):
Pass

管理者の仕組み

「django.contrib.admin」が INSTALLED_APPS に追加されると、django は各アプリで admin.py モジュールを自動的に見つけますそしてインポート読み込み。

class apps.AdminConfig
Django 1.7 new.
admin のデフォルトの AppConfig クラスは、Django の起動時に実行されます。

クラス apps.SimpleAdminConfig
Django 1.7 の新機能。
AdminConfig と同様に、autodiscover() を実行しません。

autodiscover()
各アプリの admin.py モジュールをインポートします。

Django 1.7 の変更点:
以前のバージョンでは、各アプリの admin.py を見つけるために urls.py でこのメソッドを手動で開始する必要がありました。1.7 以降、AdminConfig はこのメソッドを自動的に実行します。

カスタマイズされた AdminSite を使用している場合は、ModelAdmin のサブクラスを独自のコードにロードし、それらをすべてカスタマイズされた AdminSite に登録する必要があります。この場合、自動 Discovery() を停止する必要があり、INSTALLED_APPS の「django.contrib.admin」を「django.contrib.admin.apps.SimpleAdminConfig」に置き換えることができます。

ModelAdmin オプション

actions

管理者アクションのリスト

actions_on_top
actions_on_bottom

アクションの場所。

date_hierarchy

date_hierarchy をモデルの DateField または DateTimeField に設定して、管理画面でこのモデルに日付階層を追加します。

fields

exclude

は、モデルのフォームに表示されるフィールドを決定します。フィールドには include、exclude が含まれます。

django.contribインポートadminから

class AuthorAdmin(admin.ModelAdmin):
フィールド = ('name', 'title')

class AuthorAdmin(admin.ModelAdmin):
exclude = ('birth_date',)

次の URL フィールドとタイトル フィールドなど、いくつかのフィールドを同じ行に配置できます。

class FlatPageAdmin(admin.ModelAdmin):
フィールド = (('url', 'title'), ' content')

fieldsets

fieldsets は二重タプル (name, field_options) のリストであり、フィールドはチャンクに分割できます:

from django.contrib import admin

class FlatPageAdmin(admin.ModelAdmin):
fieldsets = (
(なし) , {
('enable_comments', ration_required', 'template_name')
}),
)

name はブロックのタイトル、field_options は辞書です。

field_options のキーは次のとおりです:

fields

fieldset に表示されるフィールド名のタプル

{
'fields': (('first_name', 'last_name'), 'address', 'city ' , 'state'),
}

classes

フィールドセットに提供される追加の CSS クラスのリスト。

説明

フィールドセットの上部に表示できる追加のテキスト。

filter_horizo​​ntal
filter_vertical

モデルにManyToManyFieldフィールドがある場合、filter_horizo​​ntalとfilter_verticalを使用して既存のオプションから複数のオプションを選択します。 1 つは水平方向、もう 1 つは垂直方向です。

form

使用されるフォーム。

django からフォームをインポート
django.contrib からインポート admin
myapp.models からインポート パーソン

class PersonForm(forms.ModelForm):

class Meta:
モデル = パーソン
exclude = ['name']

class PersonAdmin(admin.ModelAdmin):
exclude = ['age']
form = PersonForm

競合が発生した場合は、ModelAdmin が優先されます。上の例では年齢は除外されますが、名前はページに表示されます。

formfield_overrides

モデル フォーム インターフェイスの一部のフィールドのオプションをオーバーライドし、特定の種類のフィールドに独自のカスタマイズされたウィジェットを追加できます

たとえば、TextField フィールドにリッチ テキスト エディターを使用したい場合、モデル:

from django.db import models
from django.contrib import admin

# 定義されている場所からカスタム ウィジェットとモデルをインポートします
from myapp.widgets import RichTextEditorWidget
from myapp.models import MyModel

class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': RichTextEditorWidget},
}

list_display

list_display が設定されていない場合、モデルの変更リスト ページに表示できるフィールド。管理インターフェイスには、モデルの __unicode__() 結果が自動的に表示されます。

list_display には 4 つの値があります:

model のフィールド

list_display = ('first_name', 'last_name')

モデルをパラメーターとして受け取る呼び出し可能な関数

def upper_case_name(obj):
return ("%s %s" % (obj.first_name, obj.last_name)).upper()
upper_case_name.short_description = 'Name'

class PersonAdmin(admin.ModelAdmin):
list_display = (upper_case_name,)

呼び出し可能な関数に似た ModelAdmin の属性

class PersonAdmin(admin.ModelAdmin):
list_display = ('upper_case_name',)

def upper_case_name(self, obj):
return ("%s %s" % (obj.first_name, obj.last_name)).upper()
upper_case_name.short_description = 'Name'

呼び出し可能な関数に似た Model の属性

django.db からインポート モデル
django.contrib からインポート管理者

class Person(models.Model):
name = models.CharField(max_length=50)
誕生日 = models.DateField()

def diede_born_in(self):
return self.birthday.strftime('%Y' ) [:3] + "0's"
decade_born_in.short_description = '誕生10年'

class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'decade_born_in')

注:

フィールドの場合がForeignKeyの場合、外部キーの __unicode__ が表示されます。

ManyToManyField はサポートされていません

BooleanField の場合、オンまたはオフが表示されます。

指定された文字列が Model または ModelAdmin のメソッド、または呼び出し可能な関数である場合、Django は出力を自動的に HTML エスケープします。エスケープしたくない場合は、メソッドのallow_tags を True に設定できます。 XSS クロスサイト攻撃を回避するには、format_html を使用してユーザーの入力をエスケープする必要があります:

django.db から models をインポート
django.contrib から import admin
django.utils.html から import format_html

class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField (max_length=50)
color_code = models.CharField(max_length=6)

def color_name(self):
return format_html('{1} {2 )

color_name.allow_tags = True

class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name ', 'coloured_name')


指定された文字列が Model または ModelAdmin のメソッドであるか、呼び出し可能な関数を呼び出して True または False を返す場合は、メソッドのブール属性を True に設定できます。このようにして、ページ上にオンまたはオフのアイコンが表示されます。

django.db からモデルをインポート

django.contrib から import admin

class Person(models.Model):
first_name = models.CharField(max_length=50)
誕生日 = models.DateField()

defborn_in_fifties(self ):
return self.birthday.strftime('%Y')[:3] == '195'
born_in_fifties.boolean = True

class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'born_in_fifties ')


Modelの__str__や__unicode__メソッドも使えます

list_display = ('__str__', 'some_other_field')

list_displayの項目がデータベースの実フィールドでない場合は使用できません 項目の並べ替え。それ以外の場合は、この項目で注文することができ、admin_order_field 属性を設定することでこの事実を示すことができます。

django.db からモデルをインポート

django.contrib から import admin

django.utils.html から import format_html


class Person(models.Model):
first_name = models.CharField(max_length=50)
color_code = モデル。 CharField(max_length=6)

def color_first_name(self):
return format_html('{1}',
self.color_code, R Self.first_name)

Colored_first_name.allow_tags = True
COLORED_FIRST_NAME.ADMIN_ORDER_FIELD = 'FIRST_NAME'CLASS personadmin (Admin.modeLadmin ): _ List_display = ('first_name', 'colord_first_name')


これは colord で並べ替えようとしています_名, django は first_name でソートします。逆に並べ替えることもできます:

coloured_first_name.admin_order_field = '-first_name'


list_display 内の項目は属性にすることもできます:

class Person(object):

first_name = models.CharField(max_length=50)

last_name = models .CharField(max_length=50)

def my_property(self):

return self.first_name + ' ' + self.last_name

my_property.short_description = "個人のフルネーム"


full_name = property(my_property)

class PersonAdmin(admin.ModelAdmin):
list_display = ('full_name',)


list_display_link

フィールドはモード変更ページにリンクされます

class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name' , 'last_name', 'birthday')

list_display_links = ('first_name', 'last_name')

list_editable

フィールドは変更リスト ページで変更できます。その中のフィールドは list_display にも存在する必要があります。

list_filter

その中のフィールドは、モデルをフィルタリングするためのフィルタとして使用できます。関連ドメインである可能性があります。

class PersonAdmin(admin.UserAdmin):

list_filter = ('company__name',)

list_max_show_all

すべてのページのモデルの数を表示します (デフォルトは 200)。


list_per_page

各変更リスト ページのモデルの数。デフォルトは 100 です。

list_select_popular

は select_popular() に関連しています。

注文

並べ替え。

paginator

によって使用されるページネーション。デフォルトの django.core.paginator.Paginator。

prepopulated_fields

事前入力されたフィールド。

ラジオフィールド

選択ボックスの代わりにラジオボタンを使用します(ForeignKeyまたは選択肢オプションがある場合)。

class PersonAdmin(admin.ModelAdmin):
radio_fields = {"group": admin.VERTICAL}

raw_id_fields

は、ForeignKey または ManyToManyField に使用されるフィールドの ID を表示します。

class ArticleAdmin(admin.ModelAdmin):
raw_id_fields = ("新聞",)

readonly_fields

読み取り可能および編集不可能なフィールドのみ。次のメソッドにすることもできます:

from django.contrib import admin
from django.utils.html import format_html_join
from django.utils.safestring import mark_safe

class PersonAdmin(admin.ModelAdmin):
readonly_fields = ('address_report' ,)

def address_report(self,instance):
# get_full_address() が文字列のリストを返すと仮定します
# アドレスの各行について、各行を改行で区切る必要があります
# 改行で区切ります
return format_html_join(
Mark_safe( '< ;br/>'),
this address."

# short_description はモデル フィールドのverbose_name のように機能します
address_report.short_description = "Address"
#で HTML タグを使用しました。出力
address_report.allow_tags = True


save_as

が True に設定されている場合、変更ページの [保存して別を追加] ボタンは [名前を付けて保存] に置き換えられます。

save_on_top

True に設定すると、変更ページの上部に保存ボタンも表示されます。

search_fields

検索可能なフィールド。

view_on_site

「サイトで表示」リンクを表示するかどうか。

テンプレート オプション

管理テンプレートをカスタマイズするときにテンプレートを指定するために使用されるいくつかのオプション。

add_form_template

add_view() 使用されるテンプレート


change_form_template

changelist_view() 使用されるテンプレート。


delete_selected_confirmation_template

delete_selected アクション メソッドで使用されるテンプレート。


ModelAdmin.object_history_template

history_view() テンプレート、ログ。


上記は Djangoadminsite (1) ModelAdminOptions の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート