>  기사  >  백엔드 개발  >  Djangoadminsite(two)ModelAdminmethods

Djangoadminsite(two)ModelAdminmethods

黄舟
黄舟원래의
2016-12-23 17:45:241226검색

ModelAdmin 메소드

save_model(request, obj, form,change)

이 메소드는 관리 인터페이스 사용자를 위한 모델 인스턴스를 저장할 때의 동작입니다. request는 HttPRequest 인스턴스이고, obj는 모델 인스턴스이고, form은 ModelForm 인스턴스이고, 변경은 모델 인스턴스가 새 것인지 수정되었는지에 따라 부울 값입니다.

이 메서드를 재정의하면 일부 사전 저장 또는 사후 저장 작업을 수행할 수 있습니다.

예를 들어 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)

관리 인터페이스 사용자가 formset을 저장하는 방법은 다음과 같이 다시 작성할 수 있습니다.

class ArticleAdmin(admin.ModelAdmin):
def save_formset(self, request, form, formset,change):
인스턴스 = formset.save(commit=False)
예를 들어 인스턴스의 경우:
인스턴스.user = request.user
instance.save()
formset.save_m2m()

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_관련(request, form, formets,change)

formets는 모델의 인라인 formset 목록입니다. 모델 관련 객체를 저장할 때의 동작입니다.

def save_관련(self, request, form, formets,change):
"""
``HttpRequest``, 상위 ``ModelForm`` 인스턴스가 주어지면
인라인 formset 목록과
상위 항목이 추가되거나 변경되는지 여부에 따른 부울 값을 사용하여 관련 개체를
데이터베이스에 저장합니다. 이 시점에서 save_form() 및 save_model()에는
이 이미 있습니다. >get_readonly_fields(request, 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(요청)

list_filter를 반환합니다.

get_search_fields(요청)

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) for inline in self.inlines]


get_urls()

ModelAdmin의 사용 가능한 URL을 반환합니다.


class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()

my_urls = 패턴('',

(r'^my_view/$', self.my_view)
(r'^my_view/$', self.my_view)

return my_urls + url


def my_view(self, request) :
# HttpResponse를 반환해야 하는 사용자 정의 보기
Pass


위의 my_view 메서드 경로는 /admin/myapp/mymodel/my_view/입니다.

단, 위 예시에서는 검증 및 캐싱이 제공되지 않습니다.

class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
my_urls = 패턴('',
(r '^my_view/$', self.admin_site.admin_view(self.my_view))
) )
return my_urls + urls

페이지를 캐시할 수 있지만 권한 확인이 아직 진행 중인 경우 필수:

(r'^my_view/$', self.admin_site.admin_view(self.my_view, 캐시 가능=True))

get_form(request, obj=None, * *kwargs)

뷰 추가 및 변경에 사용되는 ModelForm을 반환합니다. 아래 사용자가 수퍼유저가 아닌 경우 일부 필드가 숨겨집니다.

class MyModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
self.exclude = []
request.user가 아닌 경우 .is_superuser:
                                                                                                       ~ )

관리자 추가 및 변경 보기에 사용할 InlineModelAdmins를 생성합니다.

변경 보기에 특수 인라인만 표시하려는 경우:

class MyModelAdmin( admin.ModelAdmin):

inlines = [MyInline, SomeOtherInline]

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

self.get_inline_instances( 요청):
                                                                                                                                🎜>
get_formsets_with_inlines( request, obj=None)

관리자 추가 및 변경 보기에 사용할 수율(FormSet, InlineModelAdmin) 쌍.

If 변경 보기에 특수 인라인만 표시하려는 경우:

class MyModelAdmin(admin.ModelAdmin):
inlines = [MyInline, SomeOtherInline]

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

self.get_inline_instances(request, obj)의 인라인용:

                                                        > >

formfield_for_foreignkey(db_field, request, **kwargs)

Foreignkey 필드에서 사용되는 기본 양식 필드는 다양한 사용자에 따라 다양한 하위 집합을 반환합니다.

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)
return 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 (소유자 = request.user)
Return Super (mymodeladmin, Self) .formfield_manytomany (DB_F Ield, 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'] = (

('accept ed', 'Accept'),
('거부됨', ' 거부됨'),
)
if request.user.is_superuser:
kwargs['choices'] += (( '준비', '배포 준비'),)
return super(MyModelAdmin , self).formfield_for_choice_field(db_field, request, **kwargs)

ModelAdmin.get_changelist(request, **kwargs)
변경 목록 페이지에서 사용되는 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 클래스를 반환합니다.

from django.forms.models import 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)
추가 권한이 있는지 여부입니다.

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:
return qs
return qs.filter(author=request.user)

ModelAdmin.message_user(request, message, level=messages.INFO , extra_tags='', failure_silently=False)
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입니다.

이 메서드는 {'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.change_view(request, object_id, form_url='', extra_context=None)
모델 인스턴스 버전 페이지에 대한 Django 보기 >ModelAdmin.changelist_view(request, extra_context=None)

모델 인스턴스 변경 목록/작업 페이지에 대한 Django 보기. 아래 참고를 참조하세요.


ModelAdmin.delete_view(request, object_id, extra_context=None)

모델 인스턴스에 대한 Django 보기 (s) 삭제 확인 페이지.


이 다섯 가지 메소드는 실제로 Django의 뷰 메소드로 설정됩니다. 일반적으로 뷰를 렌더링하는 데 사용되는 템플릿의 컨텍스트 데이터를 추가하여 리팩토링할 수 있습니다.

class MyModelAdmin(admin.ModelAdmin):

# 매우 사용자 정의된 변경 뷰를 위한 템플릿:

change_form_template = 'admin/myapp/extras/openstreetmap_change_form.html'

def get_osm_info(self):
# ...
통과

defchange_view(self, request, object_id, form_url='', extra_context=None):
extra_context = extra_context 또는 {}
extra_context['osm_data'] = self.get_osm_info()
return super(MyModelAdmin, self).change_view (request, object_id ,
form_url, extra_context=extra_context)


ModelAdmin 자산 정의

ModelAdmin의 추가/변경 보기를 위한 js 및 CSS 추가:

클래스 ArticleAdmin(admin.modeladmin):
클래스 미디어:
CSS = {
"ALL": ("My_styles.css",)
🎜> js = ("My_Codee .js ",)

관리자에 사용자 정의 유효성 검사 추가

사용자 정의 양식:

class MyArticleAdminForm(forms.ModelForm):

def clean_name(self ; The 위 내용은 Djangoadminsite (2) ModelAdminmethods 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!




성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.