Django admin定制
来源:互联网 发布:跟踪路由 linux 编辑:程序博客网 时间:2024/05/21 14:43
Django admin 定制
新做了一个项目,需要有后台管理功能,很自然,想到了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′)
#依据用户过滤数据
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代码,还是很容易找到解决办法。
- 定制Django Admin首页
- Django admin定制
- Django admin定制
- Django admin的一些有用定制
- 定制 Django admin 的一些功能
- Django之定制属于自己的admin
- 定制Admin
- Django Admin
- django admin
- django admin
- Django Admin
- Django - Admin
- Django-admin
- Django Admin
- Django Admin
- Django admin
- Django-admin
- Django笔记-Admin
- JAVA socket 编程
- 编程艺术第二十三~四章&十一续:杨氏矩阵查找,倒排索引关键词Hash编码
- 程序员编程艺术第二十五章:Jon Bentley:90%无法正确实现二分查找
- 程序员编程艺术第二十六章:基于给定的文档生成倒排索引(含源码下载)
- 程序员编程艺术第二十七章:不改变正负数相对顺序重新排列数组(无解?)
- Django admin定制
- 浙大研修笔记(二):创新思维与现代管理
- 数据科学和大数据研究单位
- 比特币交易平台的介绍、排名和推荐
- 淘宝数据分享平台战略
- Struts面试题
- Django
- Data Mining for Global Change: Furthering Science, Knowledge
- 阿里大数据业务平台两年发展历程