Django admin定制

原创 2013年12月05日 07:56:05

Django admin 定制

新做了一个项目,需要有后台管理功能,很自然,想到了django的admin功能。

项目的要求:

  1. 基于django的用户系统进行开发,不能修改django的源代码

  2. 权限管理,不同的用户显示不同的数据行,字段也各不相同。

首先打算在django中的Permission加入特定的权限,但是考察下来感觉很怪,django的Permission是表级的权限管理,而用户的是逻辑权限,两种权限混在一起,很难管理,所以django的Permission就不能使用了,自定义一个权限表来管理。

不能修改django的代码,用户的信息只能另外创建表来管理。但是admin后台界面通过django的user来管理比较方便,因此需要定制user的显示。google了一下,发现也很简单,先注销django中的useradmin,再把自己的useradmin注册上去就可以了。

class CustomUserAdmin(UserAdmin):

……

admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)

在user的list界面中,需要显示额外的字段,如city_name,则在CustomUserAdmin中添加下列代码:

def city_name(self,obj):
cityname = get_city_by_user(obj)
return cityname
city_name.short_description = u’城市’
city_name.verbose_name = u’城市’
city_name.allow_tags  = True

第二个需求则是需要依据不同的用户显示不同的数据,行和列都不相同。考察了django的admin代码,发现数据的获取都放在ChangeList这个类中,而ModelAdmin类有一个接口get_changelist,可以重载这个接口,加入自定义的ChangeList类,从而完成数据的过滤。changelist中的关键接口get_results,具体代码如下:

def get_results(self, request):
user = request.user
qs = self.query_set

#依据用户删除字段,
self.list_display.remove(‘field_name1′)
self.list_display.remove(‘field_name2′)
#依据用户过滤数据
qs = qs.filter(user=user)
self.query_set = qs
return super(xxxChangeList,self).get_results(request)

另外就是需要修改一些template文件,django的template文件很有层次,在http://www.slideshare.net/lincolnloop/customizing-the-django-admin中的描写如下:

Templates can be overridden:
● Across an entire project
admin/change_form.html
● Across an application
admin/<my_app>/change_form.html
● For an individual model
admin/<my_app>/<my_model>/change_form.html

查看django的ModelAdmin的render_change_form函数,也体现了这个层次

return render_to_response(form_template or [
"admin/%s/%s/change_form.html" % (app_label, opts.object_name.lower()),
"admin/%s/change_form.html" % app_label,
"admin/change_form.html"
], context, context_instance=context_instance)

如果需要修改某个app的某个model的change界面,则文件位置在admin/app/model/change_form.html。模板中需要{% extends “admin/change_form.html” %}

ModelAdmin的保存接口如下:

def save_model(self, request, obj, form, change):
“”"
Given a model instance save it to the database.
“”"
obj.save()

保存动作就可以在重载的save_model接口中进行。

django代码可读性比较好,带着问题来读admin代码,还是很容易找到解决办法。


版权声明:csdn只作为备份地,欢迎访问zoues.com

相关文章推荐

django admin扩展-自定义后台管理界面

django的后台扩展有扩展模型、扩展模型字段(field)方法,但我还是最喜欢这种扩展方式(来自django的官方文档,非常适合自定义): 转自:http://py3k.cn/chapter17/...
  • clh604
  • clh604
  • 2013年07月18日 12:34
  • 18530

[Go语言]我的第六个Go语言程序

Exercise: Errors Copy your Sqrt function from the earlier exercise and modify it to return an e...

服务器性能优化(三) --- Nginx的ngx_pagespeed安装

作为Nginx组件,ngx_pagespeed将重写你的网页,让用户以更快的速度进行访问。重写的工作包括压缩图片、缩减CSS和JavaScript、扩展缓存时间,同样还包括其它一些最佳实践: 优化...

Django之model admin自定义后台管理

Admin管理界面是django的杀手级应用。它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即向网站中添加内容。 比如,数据表如下: from djang...

Django中Admin管理与权限管理(一)————模型创建

Django下模型创建 1.创建应用 在已经存在的Django项目中通过如下命令创建一个名为notice的应用。 创建成功后,我们可以看到如下所示的内容: 2.新建简单的Gfz...

Python Django基础教程(四)(admin站点管理)

Django版本:1.11 操作系统:Windows Python:3.5Django站点管理(admin) 项目架构 构建Django站点站点管理讲得通俗一点,就是我们可以通过web方式...

Django admin list_display学习

django admin是一个非常强大的后台,基本完全包含了后台所需的功能基本功能包括:增(add)、删除(delete)、改(change)、查(display) 其中查询包括 搜索(searc...

Ubuntu12.04系统下写你的第一个Django1.5应用(二)--admin

Ubuntu12.04系统下写你的第一个Django1.5应用(二) 激活admin site 第一步:修改settings.py文件,解INSTALLED_APPS中的注释: ji...

关于python2.7.6+django1.4.2的admin样式无效问题记录

在学习django开发时,按照网上的教程,一步一步中午完成,成功出现了admin的后台管理页面,心情很是激动,但是。。。。。为毛这么丑? 在页面查看发现是css报500错误,首先呢,我直接跑到项目...

Django admin管理端的添加

django 1.02版本,想把应用加入到admin管理界面上,则 1.需要在应用(app里面)建立admin.py文件,内容如下: from newtest.address.models...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Django admin定制
举报原因:
原因补充:

(最多只允许输入30个字)