ホームページ >バックエンド開発 >Python チュートリアル >Djangoadminsite(二)ModelAdminmethods
ModelAdmin メソッド
save_model(request、obj、form、change)
このメソッドは、管理インターフェイス ユーザーのモデル インスタンスを保存するときの動作です。 request は HttPRequest インスタンス、obj はモデル インスタンス、form は ModelForm インスタンス、change は bool 値で、モデル インスタンスが新規か変更されたかによって決まります。
このメソッドをオーバーライドすると、保存前または保存後のアクションを実行できます。
たとえば、モデル インスタンスの属性として request.user を保存できます。
from django.contrib import admin
class ArticleAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change ):
obj.user = request.user
Obj.save()
delete_model(request, obj)
管理インターフェースユーザーがモデルインスタンスを削除するときのメソッド。
save_formset(request, form, formset,change)
管理インターフェースユーザーがフォームセットを保存するためのメソッドは、次のように書き換えることができます:
class ArticleAdmin(admin.ModelAdmin):
def save_formset(self, request, form, formset, change ):
インスタンス = formset.save(commit=False)
‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ 1
get_ordering(リクエスト)
注文。
class PersonAdmin(admin.ModelAdmin):
def get_ordering(self, request):
if request.user.is_superuser: return ['name', 'rank']
else:
return ['name']
get_search_results(request, queryset, search_term)
クエリ結果をカスタマイズできます。
save_popular(request、form、formsets、change)
formsets は、モデルのインライン フォームセットのリストです。モデル関連のオブジェクトを保存するときの動作。
def save_popular(self, request, form, formsets, change):
"""``HttpRequest``、親の ``ModelForm`` インスタンス、インライン フォームセットの
リスト、および以下に基づくブール値を指定します。 親が追加されるか変更されるかに関係なく、関連オブジェクトを
データベースに保存します。この時点で、save_form() と save_model() がすでに呼び出されていることに注意してください。
"""
form.save_m2m()
のフォームセット用FormSets:
Self.save_formSet (リクエスト、フォーム、フォームセット、Change = 変更)
Get_reamonly_fields (リクエスト、obj = None)
読み取り専用フィールドに戻ります。
フィールドを返します。
get_fieldsets(request, obj=None)
フィールドセットを返します。
get_list_filter(request)
get_search_fields(request)
get_inline_instances(request, obj=None)
class MyModelAdmin(admin.ModelAdmin):
return [inline(self.model) 、self.admin_site)、self.inlines のインライン用]
get_urls()
ModelAdmin の利用可能な URL を返します。 YClass mymodeladmin (admin.modeladmin):
def get_urls (seld):
urls = super (mymodeladmin, self) .Get_Urls ()
(R'^m y_View/$ ', Self.my_view)
) using using through ' s ' s through off ‐ ‐ ‐ ‐‐‐ and ‐ to _ to pass
admin/myapp/mymodel/my_view/ 。
ただし、上記の例には検証とキャッシュがありません。
検証とキャッシュを提供する必要があります。
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
my_urls = pattern('',
) (r'^my_view/$', self. admin_site .Admin_View (Self.my_view)
)
My_URLS + URLS を返します
ページをキャッシュでき、権限がまだ必要な場合:
(R '^My_view/$', Self.admin_SITE.ADMIN_VIEW (Self.my_view) 、、、cacheable=True))
get_form(request, obj=None, **kwargs)
ビューの追加と変更で使用される ModelForm を返します。以下のユーザーがスーパーユーザーではない場合、一部のフィールドは非表示になります。
class MyModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
self.exclude = []
if not request.user.is_superuser:
self.exclude.append( 'field_to_hide')
return super(MyModelAdmin, self).get_form(request, obj, **kwargs)
get_formsets(request, obj=None)
管理ビューの追加および変更で使用する InlineModelAdmins を生成します。
if変更ビューに特別なインラインを表示したいだけです:
class MyModelAdmin(admin.ModelAdmin):
inlines = [MyInline, SomeOtherInline]
def get_formsets(self, request, obj=None):
for inline in self 。 get_inline_instances(request, obj): set(request, obj)
get_formsets_with_inlines(request, obj= None)
管理者追加およびビューを変更します。
表示のみしたい場合変更ビューの特別なインライン:
class MyModelAdmin(admin.ModelAdmin):
inlines = [ MyInline, SomeOtherInline] def get_formsets_with_inlines(self, request, obj=None): for inline in self.get_inline_instances(request, obj):
# 追加ビューで MyInline を非表示にする
isinstance(inline, MyInline) で obj が None の場合:
Continue
Yield Inline.get_FormSet (Request, OBJ), Inline
Formfield_FORE_FOREIGNKEY (DB_FIELD, Request, **) Kwargs)
Formfield 。異なるユーザーに応じて異なるサブセットに戻ります:
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "car":
‐ back super (MyModelAdmin, self) .formfield_for_foreignkey (db_field, request, **kwargs)
formfield_for_manytomany(db_field, request, **kwargs)
formfield_for_foreignkey と同様に、このメソッドは多対多のフィールドに使用されます:
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_manytomany(self, db_field, request, **kwargs):if db_field.name == "cars":
kwargs["queryset"] = Car.objects.filter (owner=request.user) super(MyModelAdmin, self).formfield_for_manytomany(db_field, request, **kwargs) を返す
ModelAdmin.formfield_for_choice_field(db_field, request, **kwargs)
formfield_for_foreignkey および formfield_for_manytomany と同様に、このメソッドは選択肢の場合:
def formfield_for_choice_field(self, db_field, request, **kwargs):
if db_field.name == "status":
('accepted', 'Accepted'),
('denied', 'denied'),
if request.user.is_superuser を使用する: through ('ready', '展開の準備完了 '),) T Return Super (MyModeladmin, Self) .formfield_FOR_CHOICE_FIELD (DB_FIELD, Request, ** Kwargs)
ModelAdmin.get_changelist(request, **kwargs)
changelist ページで使用される Changelis クラスを返します。デフォルトは django.contrib.admin.views.main.ChangeList です。
ModelAdmin.get_changelist_form(request, **kwargs)
変更リスト ページで使用される ModelForm クラスを返します。
Djangoインポートフォームから
class MyForm(forms.ModelForm):
pass
class MyModelAdmin(admin.ModelAdmin):
def get_changelist_form(self, request, **kwargs):
return MyForm
ModelAdmin.get_changelist_formset (request, **kwargs)
変更リスト ページで使用される ModelFormSet クラスを返します。
django.forms.modelsから、BaseModelFormSetをインポートします
class MyAdminFormSet(BaseModelFormSet):
pass
class MyModelAdmin(admin.ModelAdmin):
def get_changelist_formset(self, request, **kwargs):
kwargs['formset'] = MyAdminFormSet
return super(MyModelAdmin, self).get_changelist_formset(request, **kwargs)
ModelAdmin.has_add_permission(request)
がadd权制限を持っているかどうか。
ModelAdmin.has_change_permission(request, obj=None)
変更権限があるかどうか。
ModelAdmin.has_delete_permission(request, obj=None)
削除権限があるかどうか。
ModelAdmin.get_queryset(request)
管理インターフェースで設定された編集可能なモデル QuerySet を返します。 ユーザーごとに異なる結果を返します:
class MyModelAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super(MyModelAdmin, self).get_queryset(request)
if request.user.is_superuser:
django.contrib.messages を使用して、バックエンド ユーザーがメッセージを送信します。
ModelAdmin.get_paginator(queryset, per_page, orphans=0,allow_empty_first_page=True)
ModelAdmin.response_add(request, obj, post_url_ continue=None)
ModelAdmin.response_change(request, obj)
ModelAdmin.response_delete(request, obj_display)
obj_display は、削除されたオブジェクトの名前です。
ModelAdmin.get_changeform_initial_data(request)
管理者変更フォームの初期データ用のフック。デフォルトでは、フィールドには GET パラメーターからの初期値が与えられます。たとえば、?name=initial_value は、name フィールドの初期値を次のように設定します。
このメソッドは、{'fieldname': 'fieldval'}:
def get_changeform_initial_data(self, request):
return {'name': 'custom_initial_value'}
ModelAdmin .add_view(request, form_url='', extra_context=None)
モデル インスタンスの追加ページの Django ビュー。以下の注を参照してください。
ModelAdmin.changelist_view(request, extra_context=None)
モデル インスタンスの変更リスト/アクション ページの Django ビュー。extra_context=None)モデル インスタンスの削除確認ページの Django ビュー。
class MyModelAdmin(admin.ModelAdmin):
# 非常にカスタマイズされた変更ビューのテンプレート:
change_form_template = 'admin/myapp/ extras/openstreetmap_change_form.html'
def get_osm_info(self):
Extra_context['osm_data '] = self.get_osm_info()
class ArticleAdmin(admin.ModelAdmin):
class Media:
css = {
"all": ("my_styles.css",)
}
js = ("my_code.js",)
カスタム検証の追加管理者
カスタマイズされたフォーム:
class MyArticleAdminForm(forms.ModelForm):
def clean_name(self):
# データを検証する何かを実行します
return self.cleaned_data["name"]
class ArticleAdmin(admin.ModelAdmin) :
form = MyArticleAdminForm
上記は Djangoadminsite (2) ModelAdminmethods の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。