Django admin site (2) ModelAdmin methods

11883 단어 django
ModelAdmin methods
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


좋은 웹페이지 즐겨찾기