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
投稿

猜你喜欢

  • 解决pycharm的Python console不能调试当前程序的问题

    2021-09-08 12:02:42
  • IE下Flash内容刷新后消失问题

    2008-01-02 12:38:00
  • 使用Abot中文分词组件来开发ASP站内搜索引擎

    2007-10-18 13:36:00
  • 详解python中docx库的安装过程

    2023-01-21 18:32:36
  • Python给定一个句子倒序输出单词以及字母的方法

    2022-11-21 00:36:50
  • 通过Python编写一个简单登录功能过程解析

    2022-05-18 23:02:51
  • python-docx如何缩进两个字符

    2022-07-04 15:56:45
  • ubuntu16.04制作vim和python3的开发环境

    2022-08-11 00:11:07
  • Python顺序结构语句详解

    2023-05-26 13:19:44
  • ​如何愉快地迁移到 Python 3

    2021-06-25 19:44:17
  • 详解MySQL中的NULL值

    2024-01-14 16:05:00
  • mysql 主从服务器的简单配置

    2009-09-06 12:06:00
  • mysql 8.0.15 winx64解压版安装配置方法图文教程

    2024-01-26 07:11:18
  • 这些CSS Selector,你都熟悉吗?

    2008-12-21 16:30:00
  • 基于python 二维数组及画图的实例详解

    2021-12-13 08:27:46
  • Python定时器线程池原理详解

    2022-02-10 02:09:07
  • Python读写及备份oracle数据库操作示例

    2024-01-21 17:09:45
  • JavaScript Reduce使用详解

    2024-04-19 10:16:03
  • ASP存储过程开发应用详解第1/2页

    2011-04-07 11:16:00
  • vue 自定义指令directive的使用场景

    2024-05-13 09:09:08
  • asp之家 网络编程 m.aspxhome.com