ホームページ >バックエンド開発 >Python チュートリアル >Djangoadminsite(一)ModelAdminOptions
管理者管理インターフェイスは 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_horizontal
filter_vertical
モデルにManyToManyFieldフィールドがある場合、filter_horizontalと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.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の項目がデータベースの実フィールドでない場合は使用できません 項目の並べ替え。それ以外の場合は、この項目で注文することができ、admin_order_field 属性を設定することでこの事実を示すことができます。
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)
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_editable
フィールドは変更リスト ページで変更できます。その中のフィールドは list_display にも存在する必要があります。
list_filter
list_filter = ('company__name',)
list_max_show_allすべてのページのモデルの数を表示します (デフォルトは 200)。
list_per_page
選択ボックスの代わりにラジオボタンを使用します(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
delete_selected_confirmation_template
ModelAdmin.object_history_template
上記は Djangoadminsite (1) ModelAdminOptions の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。