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中的魔法方法深入理解
Jul 09 Python
改进Django中的表单的简单方法
Jul 17 Python
Python中字符串的格式化方法小结
May 03 Python
python中学习K-Means和图片压缩
Nov 20 Python
Django视图和URL配置详解
Jan 31 Python
Python绘制热力图示例
Sep 27 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
Python实现随机生成任意数量车牌号
Jan 21 Python
python第三方库学习笔记
Feb 07 Python
python matplotlib包图像配色方案分享
Mar 14 Python
使用pandas生成/读取csv文件的方法实例
Jul 09 Python
python中pymysql包操作数据库方法
Apr 19 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中计算时间差的几种方法
2009/12/31 PHP
PHP错误处理函数
2016/04/03 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
Python中的类学习笔记
2014/09/23 Python
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
python实现矩阵乘法的方法
2015/06/28 Python
django反向解析URL和URL命名空间的方法
2018/06/05 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
jupyter notebook清除输出方式
2020/04/10 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
scrapy-splash简单使用详解
2021/02/21 Python
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
大学生的应聘自我评价
2013/12/13 职场文书
和平主题的演讲稿
2014/01/12 职场文书
学习标兵获奖感言
2014/02/20 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
日语系毕业求职信
2014/07/27 职场文书
党的生日活动方案
2014/08/15 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
处罚决定书范文
2015/06/24 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
python在package下继续嵌套一个package
2022/04/14 Python