Django Admin—使用小技术(持续更新)

最近刚刚完成一个Django完成的一个项目,途中用户对admin那一块自定义要求比较高,所以就把我用到的一些小技巧做个纪录。

1.增加搜索功能

效果图如下:

v2-a74c555a4f41f54dd0e17d28d711db76_b.png194935_dlHw_1768988.png

如一个表叫用户表(User)

在admin.py里面加入一个

from django.contrib import admin
Class UserAdmin(admin.ModelAdmin):
   search_fields = ('nid', 'hospital__name')

在里面只要加入search_fields里面是一个元组,里面就是搜索的字段,如果是一个关联表,可以用两个下划线来指定另外一个表里面要搜索的字段,如上面的hospital__name。

2.改变列表显示的字段

效果图如下:

v2-cf20054493b15ccfaa6a245faf5d52e1_b.png

默认的话,列表只会显示一个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.增加过滤器

过滤是必不可少的,效果如下:

v2-920d5a632812825ddeee9cb204faf5e1_b.png

右边以医院做过滤。

from django.contrib import admin
Class UserAdmin(admin.ModelAdmin):
    list_filter = ('hospital',)

用list_filter来做过滤。

4.编辑页面增加只读字段

效果如下

195005_ZIyf_1768988.pngv2-0bb6b4f8f0a1b1773186127c80ac1bdf_b.png

在编辑页面,你可能需要某个字段不能更改,具体做法。

from django.contrib import admin
Class UserAdmin(admin.ModelAdmin):
    # 只读数据
    def get_readonly_fields(self, request, obj=None):
        return ('nid',)

重构一个get_readonly_fields方法就可以了,这里面你可以根据用户权限来判断哪个用户是只读,哪个用户是能修改之类的。

 

5.去掉编辑页面下面"保存并增加另一个"和"保存并继续编辑"两个按钮

说实话这两个按钮可能有点鸡肋,不太常用。。。

所以就叫我去掉。

这个是原因的样子。

v2-4f0d04a73a233f23492bd73f97f137c4_b.png

这个是去掉之后的样子。

v2-d0646593240373daab18cc7b42f6017a_b.png195016_A6Go_1768988.png

具体做法如下:

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的默认颜色太丑,要求改掉。

195030_g6lU_1768988.pngv2-6139c95e8de05ae06a27acec55a6e7e3_b.png

增加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;
}

转载于:https://my.oschina.net/u/1768988/blog/1526496

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值