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中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
Python使用Pycrypto库进行RSA加密的方法详解
Jun 06 Python
浅析Python中的for 循环
Jun 09 Python
python 函数传参之传值还是传引用的分析
Sep 07 Python
python 读写中文json的实例详解
Oct 29 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
Python入门必须知道的11个知识点
Mar 21 Python
Python将list中的string批量转化成int/float的方法
Jun 26 Python
Django实战之用户认证(用户登录与注销)
Jul 16 Python
详解python读取和输出到txt
Mar 29 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
Feb 15 Python
Python 实现Mac 屏幕截图详解
Oct 05 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简单操作MongoDB的方法(安装及增删改查)
2016/05/26 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
Python入门篇之字符串
2014/10/17 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
个人应聘自我评价分享
2013/11/18 职场文书
大学生的网上创业计划书
2013/12/31 职场文书
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
学校运动会通讯稿
2015/07/18 职场文书
《比的意义》教学反思
2016/02/18 职场文书
求职信:会计求职的写作技巧
2019/04/24 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS