zoukankan      html  css  js  c++  java
  • django admin site (三)

    1.自定义模板设置:

    ModelAdmin. add_form_template

    Path to a custom template, used by add_view().

    ModelAdmin. change_form_template

    Path to a custom template, used by change_view().

    ModelAdmin. change_list_template

    Path to a custom template, used by changelist_view().

    ModelAdmin. delete_confirmation_template

    Path to a custom template, used by delete_view() for displaying a confirmation page when deleting one or more objects.

    ModelAdmin. delete_selected_confirmation_template

    Path to a custom template, used by the delete_selected action method for displaying a confirmation page when deleting one or more objects. See the actions documentation.

    ModelAdmin. object_history_template

    Path to a custom template, used by history_view().

    2.

    ModelAdmin methods

     

    设置方法

    注意save_model和delete_model不容许进行额外的操作

    class ArticleAdmin(admin.ModelAdmin):
        def save_model(self, request, obj, form, change):
            obj.user = request.user
            obj.save()

    For example to attach request.user to each changed formset model instance:

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

    自定义排序

    class PersonAdmin(ModelAdmin):
    
        def get_ordering(self, request):
            if request.user.is_superuser:
                return ['name', 'rank']
            else:
                return ['name']


    New in Django 1.4.

    The save_related method is 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. Here you can do any pre- or post-save operations for objects related to the parent. Note that at this point the parent object and its form have already been saved.

    ModelAdmin. get_readonly_fields( selfrequestobj=None)

    The get_readonly_fields method is given the HttpRequest and the obj being edited (or None on an add form) and is expected to return a list or tuple of field names that will be displayed as read-only, as described above in the ModelAdmin.readonly_fieldssection.

    ModelAdmin. get_prepopulated_fields( selfrequestobj=None)
    New in Django 1.4.

    The get_prepopulated_fields method is given the HttpRequest and the obj being edited (or None on an add form) and is expected to return a dictionary, as described above in the ModelAdmin.prepopulated_fields section.

    ModelAdmin. get_list_display( selfrequest)
    New in Django 1.4.

    The get_list_display method is given the HttpRequest and is expected to return a list or tuple of field names that will be displayed on the changelist view as described above in the ModelAdmin.list_display section.

    New in Django 1.4.

    The get_list_display_links method is given the HttpRequest and the list or tuple returned by ModelAdmin.get_list_display(). It is expected to return a list or tuple of field names on the changelist that will be linked to the change view, as described in theModelAdmin.list_display_links section.

    ModelAdmin. get_fieldsets( selfrequestobj=None)

    The get_fieldsets method is given the HttpRequest and the obj being edited (or None on an add form) and is expected to return a list of two-tuples, in which each two-tuple represents a <fieldset> on the admin form page, as described above in theModelAdmin.fieldsets section.

    ModelAdmin. get_list_filter( selfrequest)
    New in Django 1.5.

    The get_list_filter method is given the HttpRequest and is expected to return the same kind of sequence type as for thelist_filter attribute.

    ModelAdmin. get_inline_instances( selfrequestobj=None)
    New in Django 1.5.

    The get_inline_instances method is given the HttpRequest and the obj being edited (or None on an add form) and is expected to return a list or tuple of InlineModelAdmin objects, as described below in the InlineModelAdmin section.

    ModelAdmin. get_urls( self)

    The get_urls method on a ModelAdmin returns the URLs to be used for that ModelAdmin in the same way as a URLconf. Therefore you can extend them as documented in URL dispatcher:

    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
    

    Note

    Notice that the custom patterns are included before the regular admin URLs: the admin URL patterns are very permissive and will match nearly anything, so you’ll usually want to prepend your custom URLs to the built-in ones.

    In this example, my_view will be accessed at /admin/myapp/mymodel/my_view/ (assuming the admin URLs are included at /admin/.)

    However, the self.my_view function registered above suffers from two problems:

    • It will not perform any permission checks, so it will be accessible to the general public.
    • It will not provide any header details to prevent caching. This means if the page retrieves data from the database, and caching middleware is active, the page could show outdated information.

    Since this is usually not what you want, Django provides a convenience wrapper to check permissions and mark the view as non-cacheable. This wrapper is AdminSite.admin_view() (i.e. self.admin_site.admin_view inside a ModelAdmin instance); use it like so:

    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
    

    Notice the wrapped view in the fifth line above:

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

    This wrapping will protect self.my_view from unauthorized access and will apply the django.views.decorators.cache.never_cachedecorator to make sure it is not cached if the cache middleware is active.

    If the page is cacheable, but you still want the permission check to be performed, you can pass a cacheable=True argument to AdminSite.admin_view():

    (r'^my_view/$', self.admin_site.admin_view(self.my_view, cacheable=True))

    以上为原版内容,不在讲解



    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)

    设置不同用户登录,使用不同的权限视图


    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)

    设置含有inlines的权限视图


    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)

    外键过滤



    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)

    多余多过滤


    一下为不同权限设置不同的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)
    class MyForm(forms.ModelForm):
        class Meta:
            model = MyModel
    
    class MyModelAdmin(admin.ModelAdmin):
        def get_changelist_form(self, request, **kwargs):
            return MyForm

    自定义form,并且引入







  • 相关阅读:
    通过输入方式在Android上进行微博OAuth登录
    Android应用集成支付宝接口的简化
    Tomcat启动时报 java.lang.OutOfMemoryError: Java heap space
    Myeclipse中 Exploded location overlaps an existing deployment解决办法
    SVN提交项目时版本冲突解决方案
    Jsp过滤器Filter配置过滤类型汇总
    myeclipse修改jsp文件的名称之后,再也打不开的解决方案
    文件上传之 commons-fileupload(二)
    文件上传之 commons-fileupload(一)
    常见池化技术
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3263064.html
Copyright © 2011-2022 走看看