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_fieldsets(request, obj=None)
필드 세트를 반환합니다. get_list_filter(요청)list_filter를 반환합니다.
search_fields를 반환합니다.
InlineModelAdmin 개체의 목록 또는 튜플을 반환합니다.
def get_inline_instances(self, request, obj =None):
return [inline(self.model, self.admin_site) for inline in self.inlines]
get_urls()
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
(r'^my_view/$', self.my_view)
(r'^my_view/$', self.my_view)
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):
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)
ModelAdmin.delete_view(request, object_id, extra_context=None)
이 다섯 가지 메소드는 실제로 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 ",)
def clean_name(self ; The 위 내용은 Djangoadminsite (2) ModelAdminmethods 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!