Django --Xadmin 判断登录者身份实例


Posted in Python onJuly 03, 2020

一,为了让xadmin 登录者只能看到自己创建的数据

1,model

class UserTB(models.Model):
  name=models.CharField('姓名',max_length=30,blank=True,null=True)
  email=models.CharField('邮箱',max_length=200,blank=True,null=True)
  integral = models.IntegerField('积分', default=0)
  create_time=models.DateTimeField('创建时间',auto_now_add=True)
  user = models.OneToOneField(User,blank=True,null=True) #
  def __unicode__(self):
    return self.name
  class Meta:
    verbose_name='员工管理'
    verbose_name_plural='员工管理'
class UnitPage(models.Model):
  title=models.Charfield('标题',max_length=50)
  uploader=models.ForeignKey(UserTB,verbose_name='创建者',related_name='deuser',blank=True,null=True,on_delete=models.SET_NULL)
  create_time=models.DateTimeField('创建时间',auto_now_add=True)
  def __unicode__(self):
    return self.title
  class Meta:
    verbose_name='文章管理'
    verbose_name_plural='文章管理'

2,adminx

class ProdeUnitDisplay(object):
  list_display=['title','create_time'] #需要显示字段
  search_fields=['title',] #可搜索的字段
  def queryset(self):
    if not self.request.user.is_superuser: #判断是否是超级用户
      st = UserTB.objects.get(user=self.request.user) #找到用户表里对应的用户
      print 'st:',st
      sr = self.model.objects.filter(uploader=st) #找到该model 里该用户创建的数据
      return sr
 
    return self.model.objects.all()
xadmin.site.register(UnitPage,ProdeUnitDisplay)

补充知识:Django2集成xadmin详解-5-获取登录用户信息并填充相应Model字段

一 场景问题

继续使用IDC Model,在此Model增加user字段,用于记录添加当前数据的用户:

class IDC(models.Model):
  user = models.ForeignKey(User, on_delete=models.CASCADE, editable=False, null=True) # 记录创建该数据的用户
  name = models.CharField(max_length=64)
  contact = models.CharField(max_length=32)
  phone = models.CharField(max_length=32)
  address = models.CharField(max_length=128)
  create_time = models.DateField(auto_now=True)

  def __str__(self):
    return self.name

  class Meta:
    verbose_name = "IDC机房"
    verbose_name_plural = verbose_name

问题:如何在增加IDC数据的时候,获取当前登录的用户信息,并保存到user字段里?

二 解决方法

打开IdcManager目录的adminx.py,在IDCAdmin类里增加save_models方法,代码如下:

@xadmin.sites.register(IDC)
class IDCAdmin(object):
  list_display = ("user", "name", "contact", "phone", "address", "create_time")
  list_display_links = ("name",)

  def save_models(self):
    self.new_obj.user = self.request.user
    super().save_models()

三 总结

xadmin的文档和资料比较少,这个问题虽然也就三行代码的事情,但是我在百度是没找到解决方案的。

最终是查看xadmin的代码摸索解决的。

那么,应该查看哪部分代码?考虑到这个操作是在保存数据的时候触发的,那么就找xadmin处理保存操作(编辑界面)的代码:

venv\Lib\site-packages\xadmin\views\edit.py

以上这篇Django --Xadmin 判断登录者身份实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
利用python操作SQLite数据库及文件操作详解
Sep 22 Python
python正则表达式爬取猫眼电影top100
Feb 24 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
基于DataFrame改变列类型的方法
Jul 25 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
Pyinstaller打包.py生成.exe的方法和报错总结
Apr 02 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
Jul 03 Python
Numpy之reshape()使用详解
Dec 26 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 Python
详解Python多线程下的list
Jul 03 #Python
Python 字符串池化的前提
Jul 03 #Python
Pycharm打开已有项目配置python环境的方法
Jul 03 #Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 #Python
windows支持哪个版本的python
Jul 03 #Python
Django Form设置文本框为readonly操作
Jul 03 #Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
Jul 03 #Python
You might like
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
php获取本周星期一具体日期的方法
2015/04/20 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
js 操作select相关方法函数
2009/12/06 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
2016/05/05 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
python使用super()出现错误解决办法
2017/08/14 Python
python3实现随机数
2018/06/25 Python
Python程序暂停的正常处理方法
2019/11/07 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
继承权公证书
2014/04/09 职场文书
体现团队精神的口号
2014/06/06 职场文书
社区文艺活动方案
2014/08/19 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
python字典的元素访问实例详解
2021/07/21 Python
python 管理系统实现mysql交互的示例代码
2021/12/06 Python