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

作者:飞翔豆皮 时间:2021-08-28 07:59:34 

一,为了让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

来源:https://blog.csdn.net/QQ1752506968/article/details/80772699

标签:Django,Xadmin,登录,身份
0
投稿

猜你喜欢

  • Python判断对象是否相等及eq函数的讲解

    2022-04-13 03:15:22
  • php的RSA加密解密算法原理与用法分析

    2023-07-13 11:27:14
  • Python+OpenCV实现表面缺陷检测

    2021-10-17 21:25:21
  • python break和continue用法对比

    2021-11-03 14:36:20
  • Python实战之实现简单的名片管理系统

    2023-07-18 06:48:02
  • Python判断变量是否已经定义的方法

    2023-08-01 07:14:01
  • 跨浏览器实现float:center,No CSS hacks

    2008-08-22 12:59:00
  • python密码学简单替代密码解密及测试教程

    2023-09-30 08:13:00
  • 用javascript实现页面无刷新更新数据

    2011-08-14 07:54:08
  • Python数据挖掘Pandas详解

    2021-08-04 13:11:44
  • 用CSS实现柱状图(Bar Graph)的方法(二)—基于表格元素的柱状图

    2008-05-26 13:23:00
  • python 获取页面表格数据存放到csv中的方法

    2021-01-28 02:13:48
  • matplotlib绘制甘特图的万能模板案例

    2022-07-11 20:24:08
  • 关闭窗口时保存数据的办法

    2009-02-19 13:39:00
  • 端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!

    2023-08-23 06:29:31
  • python 除法保留两位小数点的方法

    2022-05-09 02:31:22
  • SQL Server分析服务性能优化浅析

    2010-01-16 13:30:00
  • 在python中使用[[v]*n]*n遇到的坑及解决

    2022-02-03 10:31:35
  • 如何在pycharm中配置pyqt5设计GUI操作教程

    2021-09-28 17:42:21
  • 如何优雅地处理Django中的favicon.ico图标详解

    2023-12-03 09:41:36
  • asp之家 网络编程 m.aspxhome.com