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实现包含min函数的栈
Apr 29 Python
Python使用微信SDK实现的微信支付功能示例
Jun 30 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
Python3爬虫全国地址信息
Jan 05 Python
解决Django加载静态资源失败的问题
Jul 28 Python
python绘制彩虹图
Dec 16 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
基于opencv实现简单画板功能
Aug 02 Python
python实现AdaBoost算法的示例
Oct 03 Python
使用Python爬取Json数据的示例代码
Dec 07 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的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
zen_cart实现支付前生成订单的方法
2016/05/06 PHP
iOS10推送通知开发教程
2016/09/19 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
JS运动基础框架实例分析
2015/03/03 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
Python可迭代对象操作示例
2019/05/07 Python
Python如何在DataFrame增加数值
2020/02/14 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
酒店端午节促销方案
2014/02/18 职场文书
开票员岗位职责
2015/02/12 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
话题作文之学会尊重
2019/12/16 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android