xadmin后台,如果一个功能的权限划分还不能满足需求,需要根据不同的用户在同一功能的数据中做一个遍历和过滤,可以按照下面的做法
下面的做法适用于xadmin后台,如果是django默认admin后台,可以不采用,有更方便的办法,直接重写queryset方法,根据request.user来进行遍历。
新增一个模块(middleware)
- 新增一个目录在app的目录下面,然后创建一个空的__init__py文件
- 创建一个threadlocals.py文件
#!/usr/bin/python
try:
from threading import local
except ImportError:
from django.utils._threading_local import local
_thread_locals = local()
def get_current_user():
return getattr(_thread_locals, 'user', None)
class ThreadLocals(object):
"""Middleware that gets various objects from the
request object and saves them in thread local storage."""
def process_request(self, request):
_thread_locals.user = getattr(request, 'user', None)
功能模块新增登陆用户的外键列
from django.contrib.auth.models import User
user_name = models.ManyToManyField(User,verbose_name=u"名称")
- 满足同一功能谋一跳数据可以多个用户访问和操作
重写功能模块的admin后台class部分功能
重写queryset方法,主要重点是获取登陆用户的信息,不过上面的模块可以实现这一点
from myapp.middleware import threadlocals
def queryset(self):
qs = super(SyncListAdmin, self).queryset()
self.login_user = threadlocals.get_current_user()
return qs.filter(user_name=self.login_user)
完成以上内容,注册功能的admin模块,再次访问,根据登陆用户来决定是否显示某功能的每一天数据。