ホームページ  >  記事  >  バックエンド開発  >  Djangoadminsite(二)ModelAdminmethods

Djangoadminsite(二)ModelAdminmethods

黄舟
黄舟オリジナル
2016-12-23 17:45:241276ブラウズ

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_prepopulated_fields(request, obj=None)

事前設定されたフィールドを返します。

get_list_display(リクエスト)

list_displayを返します。

get_list_display_links(request, list_display)

list_display_link を返します。

get_fields(request, obj=None)

フィールドを返します。

get_fieldsets(request, obj=None)

フィールドセットを返します。


get_list_filter(request)

list_filterを返します。


get_search_fields(request)

search_fields を返します。


get_inline_instances(request, obj=None)

InlineModelAdmin オブジェクトのリストまたはタプルを返します


class MyModelAdmin(admin.ModelAdmin):

def get_inline_instances(self, request, obj=None):

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 。異なるユーザーに応じて異なるサブセットに戻ります:

Class MyModelAdmin(admin.ModelAdmin):

def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "car":

kwargs["queryset"] = Car.objects.filter(owner=request .user)

‐ 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 と同様に、このメソッドは選択肢の場合:

class MyModelAdmin(admin.ModelAdmin):

def formfield_for_choice_field(self, db_field, request, **kwargs):
if db_field.name == "status":

kwargs['choices'] = (

('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)

add_view() の HttpResponse を決定し、モデルの作成後に実行します。 。


ModelAdmin.response_change(request, obj)

change_view() の HttpResponse を決定し、モデルが変更された後に実行します。


ModelAdmin.response_delete(request, obj_display)

delete_view() の HttpResponse を決定し、モデルが削除された後に実行します。


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 ビュー。

これら 5 つのメソッドは、実際には 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()

,,,,,,,,,,,,,,、CSS:

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) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。