django-admin管理后台高级自定义

时间:2024-04-15 03:37:26

django自带的admin后台管理系统,在很多网站中被称为django的杀手级的应用。那么django-admin的适用情形倒底有哪些呢,一般 来说对于大型的商业性的项目通常不用采用django-admin来做为后台管理框架系统,通常的做法是通过权限控制在前台以不同的模板页的风格来区别是前台功能还是后台功能,或者是建立一个独立的后台管理系统。那是不是说django-admin在国内就没有市场了呢,事实上并不是,对于一些小微企业或创业公司,或者项目比较紧急的时候通常会采用django-admin来作为后台系统

django-admin中进行定制化开发主要关注两部分内容:

UserAdmin

ModelAdmin

通过对这两个类进行子类化的方式来实现一些简单功能的定制

首先如果要对admin进行定制,需要将建立好的模型导入到admin模块之 中,然后在admin中注册该模块,如下所示:

class xxoo(models.Model):

pass

在admin文件中配置

from django.contrib import admin

from models import xxoo

注册:

admin.site.register(xxoo)

在django中本身支持本地化的语言显示,如需要把界面转变为中文的话需要在配置文件中添加以下配置MiDDLEWARE_CLASSES的SessionMiddleware下

django.middleware.locale.localeMiddleware

如果对于界面中用户信息的展示,不想全部显示或是想自定义显示可以通过自定义UserAdmin来实现

from django.contrib import admin
from models import xxoo
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
例:只显示以下几个字段,可以通过子类化来实现
class MyUserAdmin(UserAdmin):
     list_display=('email','first_name','last_name')
同时由于user会注册到admin中,所以在定制化时需要先反注册
admin.site.unregister(user)
然后将user注册到MyUserAdmin中
admin.site.register(User,MyUserAdmin)

对于界面右侧的过滤器的自定义:如果只想过滤其中一个属性,如是否是职员:
可以在MyUserAdmin中加入以下代码:

List_filter=('is_staff',)

对于搜索的自定义,默认情况下django搜索所有字段,只要检索到某一字段包含所搜索的内容就会被搜索到,如果想自定义搜索的字段可以在MyUserAdmin中加入以下代码

search_fields=('last_name',)

如何显示自定义的模型在网站中的显示,如xxoo

同样是通过子类化来实现

在admin中注册poem

子类化ModelAdmin
class PoemModelAdmin(admin.ModelAdmin):
     List_display=('email','first_name','last_name')
     class Meta:
        mode=Poem
admin.site.register(Poem,PoemModelAdmin)

给字段添加link查看信息,如想查看author的信息,通过以下设置后在页面中该 字段将变为一个a标签,点击时将带出相应的信息
List_display_links=['author',]
刷新页面后点击将字段标签查看

对于新注册的model默认情况下是没有搜索功能的,如果想加入搜索功能,可以在代码中加入以下代码
   search_fields=('last_name',)

如果想使一个字段可以编辑,可以在代码中加入以下代码

List_editable=['title']

django中规定:一个字段不能同时可链接可编辑

对于admin后台界面的定制化,可以通过自定义template来实现
在代码中加入以下代码
change_form_template='xxx.html'

xxx.html的内容如下,继承change_form.html   template目录下
{%extends 'admin/change_form.html'%}
{%block form_top%}
内容
{%endblock%}

widget用来定义显示风格,如显示为textbox,dropdownlist等

如果想修改一个字段的显示风格可以做以下设置

from django.contrib.auth.admin import Useradmin
from django.contrib.auth.models import User
from django import forms
from django.utils.safestring import mark_safe
from django.template.loader import rend_to_string
from models import xxoo
class PoemForm(forms.ModelForm):
     class Meta:
        model=xxoo
        fields=['author','title']
        widgets={
              'author':forms.Textarea(attrs={'cols':'20','rows':'1'})
 }

通过以上设置即将author字段设置为textarea样式,同时设置了它的一些属性

设置css样式:

在static文件夹中新建xxx.css
在代码中做以下设置
class SubInputText(forms.TextInput):
     class Media:
        css={
                 'all':('input.css',)
            }

class PoemForm(forms.ModelForm):
     class Meta:
        model=xxoo
        fields=['author','title']
        widgets={
              'author':forms.Textarea(attrs={'cols':'20','rows':'1'}),
              'title':SubInputText(),#设置css
              'type':forms.RadioSelect  将type字段设置为radiobutton样式
 }