Django admin site (2) ModelAdmin methods
11883 단어 django
save_model(request, obj, form, change)
이 방법은 모델 실례를 저장하는 관리자 인터페이스의 행동입니다.Request는 Http Request 실례,obj는 모델 실례,form은 모델 Form 실례,change는 bool 값으로 모델 실례가 새로 추가되었는지 수정되었는지에 따라 결정됩니다.
이 방법을 다시 쓰는 방법은pre-save나post-save 행위를 할 수 있습니다.
예를 들어, Request를.사용자가 모델 인스턴스로 저장한 속성:
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)
admin 인터페이스 사용자가 formset을 저장하는 방법은 다음과 같습니다.
class ArticleAdmin(admin.ModelAdmin):
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
instance.user = request.user
instance.save()
formset.save_m2m()
get_ordering(request)
정렬
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_related(request, form, formsets, change)
formsets는 모델의 inline formsets 목록입니다.모델의 관련 대상이 저장될 때의 행동입니다.
def save_related(self, request, form, formsets, change):
"""
Given the ``HttpRequest``, the parent ``ModelForm`` instance, the
list of inline formsets and a boolean value based on whether the
parent is being added or changed, save the related objects to the
database. Note that at this point save_form() and save_model() have
already been called.
"""
form.save_m2m()
for formset in formsets:
self.save_formset(request, form, formset, change=change)
get_readonly_fields(request, obj=None)
읽기 전용 필드를 반환합니다.
get_prepopulated_fields(request, obj=None)
사전 설정 필드를 반환합니다.
get_list_display(request)
list 로 돌아가기display.
get_list_display_links(request, list_display)
list 로 돌아가기display_link.
get_fields(request, obj=None)가 필드를 반환합니다.
get_fieldsets(request,obj=None)가fieldsets를 되돌려줍니다.
get_list_filter(request) 반환listfilter.
get_search_fields(request)가 검색 반환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에서 사용할 수 있는 urls를 되돌려줍니다.
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
my_urls = patterns('',
(r'^my_view/$', self.my_view)
)
return my_urls + urls
def my_view(self, request):
# custom view which should return an HttpResponse
pass
위 myview 방법의 경로는/admin/myapp/mymodel/myview/.
그러나 위의 예에서는 유효성 검사 및 캐시가 없으므로 유효성 검사 및 캐시를 제공합니다.
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
my_urls = patterns('',
(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, cacheable=True))
get_form(request, obj=None, **kwargs)
dd와 change view에서 사용하는 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)
Yields InlineModelAdmins for use in admin add and change views.
the change view에서 특별한 inline만 보여주려면:
class MyModelAdmin(admin.ModelAdmin):
inlines = [MyInline, SomeOtherInline]
def get_formsets(self, request, obj=None):
for inline in self.get_inline_instances(request, obj):
# hide MyInline in the add view
if isinstance(inline, MyInline) and obj is None:
continue
yield inline.get_formset(request, obj)
get_formsets_with_inlines(request, obj=None)
Yields (FormSet, InlineModelAdmin) pairs for use in admin add and change views.
the change view에서 특별한 inline만 보여주려면:
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):
# hide MyInline in the add view
if isinstance(inline, MyInline) and obj is None:
continue
yield inline.get_formset(request, obj), inline
formfield_for_foreignkey(db field, request, **kwargs) Foreignkey 필드에 사용되는 기본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)
return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
formfield_for_manytomany(db_field, request, **kwargs)
formfieldfor_foreignkey, 이 방법은 many to many 필드에 사용됩니다.:
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)
return super(MyModelAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)
ModelAdmin.formfield_for_choice_field(db field, request, **kwargs)는formfield 와 유사for_foreignkey와formfieldfor_manytomany, 이 방법은choices에 사용됩니다.
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:
kwargs['choices'] += (('ready', 'Ready for deployment'),)
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)은changelist 페이지에서 사용하는 ModelForm 클래스를 반환합니다.
from django import forms
class MyForm(forms.ModelForm):
pass
class MyModelAdmin(admin.ModelAdmin):
def get_changelist_form(self, request, **kwargs):
return MyForm
ModelAdmin.get_changelist_formset(request, **kwargs)은changelist 페이지에서 사용하는 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)에dd 권한이 있는지 여부입니다.
ModelAdmin.has_change_permission(request, obj=None)에 change 권한이 있는지 여부
ModelAdmin.has_delete_permission(request, obj=None)에 delete 권한이 있는지 여부
ModelAdmin.get_queryset(request)은 admin 인터페이스에서 편집할 수 있는 모델 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=",fail silently=False)에서django를 사용합니다.contrib.메시지 백엔드의 사용자가 메시지를 보냅니다.
ModelAdmin.get_paginator(queryset,per page,orphans=0,allow empty first page=True)는 페이지 나누기 인스턴스를 반환합니다.Returns an instance of the paginator to use for this view. By default, instantiates an instance of paginator.
ModelAdmin.response_add(request, obj,post url continue=None) 결정addview ()의 HttpResponse, 모델이 만들어진 후에 실행됩니다.
ModelAdmin.response_change(request,obj)change 결정view ()의 HttpResponse 가 수정되어 모델이 실행됩니다.
ModelAdmin.response_delete(request, obj display)는 delete 를 결정합니다.view () 의 HttpResponse, 모델이 삭제된 후에 실행됩니다.
obj_display는 삭제된 대상의name입니다.
ModelAdmin.get_changeform_initial_data(request)A hook for the initial data on admin change forms. By default, fields are given initial values from GET parameters. For instance, ?name=initial_value will set the name field’s initial value to be initial_value.
This method should return a dictionary in the form {'fieldname': 'fieldval'}:
def get_changeform_initial_data(self, request):
return {'name': 'custom_initial_value'}
Other methods
ModelAdmin.add_view(request, form_url='', extra_context=None)Django view for the model instance addition page. See note below.
ModelAdmin.change_view(request, object_id, form_url='', extra_context=None)Django view for the model instance edition page. See note below.
ModelAdmin.changelist_view(request, extra_context=None)Django view for the model instances change list/actions page. See note below.
ModelAdmin.delete_view(request, object_id, extra_context=None)Django view for the model instance(s) deletion confirmation page. See note below.
ModelAdmin.history_view(request, object_id, extra_context=None)Django view for the page that shows the modification history for a given model instance.
이 다섯 가지 방법은 실제적으로django의view 방법으로 설정된 것이다.일반적으로 렌더링뷰에 사용되는 템플릿을 추가하는 context 데이터를 재구성할 수 있습니다.
class MyModelAdmin(admin.ModelAdmin):
# A template for a very customized change view:
change_form_template = 'admin/myapp/extras/openstreetmap_change_form.html'
def get_osm_info(self):
# ...
pass
def change_view(self, request, object_id, form_url='', extra_context=None):
extra_context = extra_context or {}
extra_context['osm_data'] = self.get_osm_info()
return super(MyModelAdmin, self).change_view(request, object_id,
form_url, extra_context=extra_context)
ModelAdmin asset definitions
ModelAdmin의 add/change views에 js 및 css를 추가하려면:
class ArticleAdmin(admin.ModelAdmin):
class Media:
css = {
"all": ("my_styles.css",)
}
js = ("my_code.js",)
Adding custom validation to the admin
form을 사용자정의하려면 다음과 같이 하십시오.
class MyArticleAdminForm(forms.ModelForm):
def clean_name(self):
# do something that validates your data
return self.cleaned_data["name"]
class ArticleAdmin(admin.ModelAdmin):
form = MyArticleAdminForm
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.