网络编程
位置:首页>> 网络编程>> Python编程>> Django --Xadmin 判断登录者身份实例

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

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

标签:Django,Xadmin,登录,身份

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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com