一,为了让xadmin 登录者只能看到自己创建的数据
1,model
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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
1
2
3
4
5
6
7
8
9
10
11
12
|
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字段,用于记录添加当前数据的用户:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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方法,代码如下:
1
2
3
4
5
6
7
8
|
@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 判断登录者身份实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/QQ1752506968/article/details/80772699