最近刚刚完成一个Django完成的一个项目,途中用户对admin那一块自定义要求比较高,所以就把我用到的一些小技巧做个纪录。
1.增加搜索功能
效果图如下:
如一个表叫用户表(User)
在admin.py里面加入一个
from django.contrib import admin
Class UserAdmin(admin.ModelAdmin):
search_fields = ('nid', 'hospital__name')
在里面只要加入search_fields里面是一个元组,里面就是搜索的字段,如果是一个关联表,可以用两个下划线来指定另外一个表里面要搜索的字段,如上面的hospital__name。
2.改变列表显示的字段
效果图如下:
默认的话,列表只会显示一个id字段。有的时候我们可能要显示一些其他字段。
from django.contrib import admin
Class UserAdmin(admin.ModelAdmin):
list_display = ('id', 'diy_groups', 'last_login', 'date_joined', 'realname', 'mobile', 'birthday', 'banknumber')
同第一个一样,如果有关键表的话,也可以使用两个下划线来指定另外一个表里要显示的字段。
但是有的时候,我们可能要显示一个字段,并不在这个表里面定义的字段。具体做法如下:
from django.contrib import admin
from django.utils.safestring import mark_safe
Class UserAdmin(admin.ModelAdmin):
list_display = ('hospital_user',)
def hospital_user(self, obj):
return mark_safe(
'<a class="download-image" href="/admin/userManage/user/?nurse_hospital__id__exact={0}">点击查看</a>'.format(
obj.id))
hospital_user.short_description = '查看所有人员'
我定义了一个hostital_user为我自定义的字段,然后定义了方法去实现,我这边返回的是一个a标签,当然也可以随便返回什么东西,然后下面的short_description为字段的名称。这个方法返回的obj就是当前这种数据。
3.增加过滤器
过滤是必不可少的,效果如下:
右边以医院做过滤。
from django.contrib import admin
Class UserAdmin(admin.ModelAdmin):
list_filter = ('hospital',)
用list_filter来做过滤。
4.编辑页面增加只读字段
效果如下
在编辑页面,你可能需要某个字段不能更改,具体做法。
from django.contrib import admin
Class UserAdmin(admin.ModelAdmin):
# 只读数据
def get_readonly_fields(self, request, obj=None):
return ('nid',)
重构一个get_readonly_fields方法就可以了,这里面你可以根据用户权限来判断哪个用户是只读,哪个用户是能修改之类的。
5.去掉编辑页面下面"保存并增加另一个"和"保存并继续编辑"两个按钮
说实话这两个按钮可能有点鸡肋,不太常用。。。
所以就叫我去掉。
这个是原因的样子。
这个是去掉之后的样子。
具体做法如下:
from django.contrib import admin
from django.contrib.admin.templatetags.admin_modify import *
from django.contrib.admin.templatetags.admin_modify import submit_row as original_submit_row
# 改变下面一排按钮
@register.inclusion_tag('admin/submit_line.html', takes_context=True)
def submit_row(context):
ctx = original_submit_row(context)
if context.request.user.is_superuser or context.request.user.diy_groups == '2':
pass
else:
ctx.update({
'show_save': False,
'show_save_and_continue': False
})
return ctx
在相应的admin.py里面加入这个方法,只要把show_save和show_save_and_continue设为False就可以了。
6.改变Header的颜色
有人说Django的Header的默认颜色太丑,要求改掉。
增加templates/admin/base_site.html文件。
base_site.html
{% extends "admin/base.html" %}
{% block extrastyle %}
<link href="/static/css/adminextra.css" rel="stylesheet" type="text/css" media="screen,projection" />
<link rel="shortcut icon" type="image/png" href="/static/favicon.ico"/>
{% endblock %}
{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}
然后写css文件就可以了。
adminextra.css
#header {
background-color: #af74d5;
}
.breadcrumbs {
background-color: #c598e2 !important;
}