django admin 定制
转自 http://blog.robotercoding.com/?p=139
新做了一个项目,需要有后台管理功能,很自然,想到了django的admin功能。
项目的要求:
- 基于django的用户系统进行开发,不能修改django的源代码
- 权限管理,不同的用户显示不同的数据行,字段也各不相同。
首先打算在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′)
#依据用户过滤数据 No longer do you need to go all the way to a real casino to experience the sacramentosirens.net excitement of playing choice online casino games.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/lt;my_appgt;/change_form.html
● For an individual model
admin/lt;my_appgt;/lt;my_modelgt;/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代码,还是很容易找到解决办法。
转载于:https://www.cnblogs.com/Amagasaki/articles/3574138.html
django admin 定制相关推荐
- 深度定制django admin界面
定制django admin界面 1.修改admin界面中的名字 1.1 修改模型名字 在models.py的模型类中中添加一个Meta内部类,设置 verbose_name和verbose_name ...
- Django Admin 上传多张图片并显示缩略图
Django Admin 上传多张图片并显示缩略图 文章目录 Django Admin 上传多张图片并显示缩略图 1.效果预览 2.自定义Widget 3.定义模型和模型表单 3.1 定义模型 3.2 ...
- Django Admin 后台管理系统
文章目录 Admin 后台管理系统 一,后台管理系统的重要性 二,了解Django后台管理功能 Admin 后台管理系统 Django 的后台管理系统是非常出色的,新建项目以后,Django 就为我们 ...
- django admin celery beat简单的定时任务管理平台
一直都在想写一个这样平台,前端比较low,所以就使用了Django 自带的后端写了一个定时任务管理平台 具体结构如下 djangotask/ ├── app01 │?? ├── admin.py │? ...
- Django admin操作
无名小妖 昵称:无名小妖 园龄:1年6个月 粉丝:22 关注:1 +加关注 搜索 常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 我的标签 Python(1) python3( ...
- Django admin 管理工具
Django admin 管理工具 1 admin组件的使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 se ...
- 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题
[Python]解决Django Admin管理界面样式表(CSS Style)丢失问题 参考文章: (1)[Python]解决Django Admin管理界面样式表(CSS Style)丢失问题 ( ...
- django admin search_fields
字段名以^开头,表示匹配开头 字段名以=开头,表示就精确匹配 字段名以@开头,表示全文检索 否则使用包含 如果字段名中包括__ ,则会对queryset取唯一值 技巧: django admin会分析 ...
- xadmin oracle 查询,Django admin 实现search_fields精确查询实例
我就废话不多说了,还是直接看代码吧! search_fields = (u'gift_rule_id',u'user_id', u'activity_id',) //默认的查询集合 def get_q ...
最新文章
- libevent源码深度剖析十一
- 霍夫变换MATLAB怎么实现,做过Matlab关于霍夫变换检测圆的高手请进
- 创建Maven项目时实际使用JDK为1.8,该怎样修改其默认的JDK1.5
- html5 json转字符串,web前端-js小记(5)-字符串及json
- winfrom保存图片,将文件夹中图片放入listview,与撤回操作
- 博客转移至 https://www.babac.cn/
- 光荣之路测试开发面试linux考题之四:性能命令
- (10)魔兽文件打包器里的传奇哈希表
- 网站搜索引擎优化SEO策略及相关工具资源
- python从1到n整数中1点的个数_Python解决 从1到n整数中1出现的次数
- 贯穿 C++ 11 与 C++ 17 的 Lambda 到底是个什么?
- Apollo(阿波罗)是携程框架部门研发的分布式配置中心,ubuntu本机安装
- SQL Server 2008文件与文件组的关系
- 1037: 求一元二次方程的根(带虚根)
- Coursera吴恩达《构建机器学习项目》课程笔记(2)-- 机器学习策略(下)
- 【树莓派不吃灰】基础篇⑯ 搭建sqlite3数据库环境
- 初入python世界——python基础语法
- linux 内核调试 booting the kernel.,booting the kernel后无内核启动信息的调试方法
- MyBatis的Dao层实现方式
- js实现 MD5加密
热门文章
- 0基础小白都说简单!10秒做好酷炫图表,可视化工具帮了大忙
- FFmpeg安卓平台编译
- oracle删除universal,Oracle自带的Universal Installer卸载存在问题
- linux命令cd回退_Linux命令一
- decode函数_「实践」云函数 + API,你也可以做个天气信息系统
- mysql cpu高 重启无效_解决mysqlcpu高的问题
- vue通过链接显示服务器上的图片_图片网站该如何做SEO优化?详细讲解图片优化技巧...
- 动态规划之子序列问题
- 建设城市(city)(【CCF】NOI Online 能力测试2 入门组第三题 )
- Google Colab使用学习笔记