转自 http://blog.robotercoding.com/?p=139

新做了一个项目,需要有后台管理功能,很自然,想到了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′)
#依据用户过滤数据 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 定制相关推荐

  1. 深度定制django admin界面

    定制django admin界面 1.修改admin界面中的名字 1.1 修改模型名字 在models.py的模型类中中添加一个Meta内部类,设置 verbose_name和verbose_name ...

  2. Django Admin 上传多张图片并显示缩略图

    Django Admin 上传多张图片并显示缩略图 文章目录 Django Admin 上传多张图片并显示缩略图 1.效果预览 2.自定义Widget 3.定义模型和模型表单 3.1 定义模型 3.2 ...

  3. Django Admin 后台管理系统

    文章目录 Admin 后台管理系统 一,后台管理系统的重要性 二,了解Django后台管理功能 Admin 后台管理系统 Django 的后台管理系统是非常出色的,新建项目以后,Django 就为我们 ...

  4. django admin celery beat简单的定时任务管理平台

    一直都在想写一个这样平台,前端比较low,所以就使用了Django 自带的后端写了一个定时任务管理平台 具体结构如下 djangotask/ ├── app01 │?? ├── admin.py │? ...

  5. Django admin操作

      无名小妖     昵称:无名小妖 园龄:1年6个月 粉丝:22 关注:1 +加关注 搜索 常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 我的标签 Python(1) python3( ...

  6. Django admin 管理工具

    Django admin 管理工具 1 admin组件的使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 se ...

  7. 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题

    [Python]解决Django Admin管理界面样式表(CSS Style)丢失问题 参考文章: (1)[Python]解决Django Admin管理界面样式表(CSS Style)丢失问题 ( ...

  8. django admin search_fields

    字段名以^开头,表示匹配开头 字段名以=开头,表示就精确匹配 字段名以@开头,表示全文检索 否则使用包含 如果字段名中包括__ ,则会对queryset取唯一值 技巧: django admin会分析 ...

  9. xadmin oracle 查询,Django admin 实现search_fields精确查询实例

    我就废话不多说了,还是直接看代码吧! search_fields = (u'gift_rule_id',u'user_id', u'activity_id',) //默认的查询集合 def get_q ...

最新文章

  1. libevent源码深度剖析十一
  2. 霍夫变换MATLAB怎么实现,做过Matlab关于霍夫变换检测圆的高手请进
  3. 创建Maven项目时实际使用JDK为1.8,该怎样修改其默认的JDK1.5
  4. html5 json转字符串,web前端-js小记(5)-字符串及json
  5. winfrom保存图片,将文件夹中图片放入listview,与撤回操作
  6. 博客转移至 https://www.babac.cn/
  7. 光荣之路测试开发面试linux考题之四:性能命令
  8. (10)魔兽文件打包器里的传奇哈希表
  9. 网站搜索引擎优化SEO策略及相关工具资源
  10. python从1到n整数中1点的个数_Python解决 从1到n整数中1出现的次数
  11. 贯穿 C++ 11 与 C++ 17 的 Lambda 到底是个什么?
  12. Apollo(阿波罗)是携程框架部门研发的分布式配置中心,ubuntu本机安装
  13. SQL Server 2008文件与文件组的关系
  14. 1037: 求一元二次方程的根(带虚根)
  15. Coursera吴恩达《构建机器学习项目》课程笔记(2)-- 机器学习策略(下)
  16. 【树莓派不吃灰】基础篇⑯ 搭建sqlite3数据库环境
  17. 初入python世界——python基础语法
  18. linux 内核调试 booting the kernel.,booting the kernel后无内核启动信息的调试方法
  19. MyBatis的Dao层实现方式
  20. js实现 MD5加密

热门文章

  1. 0基础小白都说简单!10秒做好酷炫图表,可视化工具帮了大忙
  2. FFmpeg安卓平台编译
  3. oracle删除universal,Oracle自带的Universal Installer卸载存在问题
  4. linux命令cd回退_Linux命令一
  5. decode函数_「实践」云函数 + API,你也可以做个天气信息系统
  6. mysql cpu高 重启无效_解决mysqlcpu高的问题
  7. vue通过链接显示服务器上的图片_图片网站该如何做SEO优化?详细讲解图片优化技巧...
  8. 动态规划之子序列问题
  9. 建设城市(city)(【CCF】NOI Online 能力测试2 入门组第三题 )
  10. Google Colab使用学习笔记