一,為了讓xadmin 登錄者只能看到自己創(chuàng)建的數(shù)據(jù)
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( '創(chuàng)建時(shí)間' ,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( '標(biāo)題' ,max_length = 50 ) uploader = models.ForeignKey(UserTB,verbose_name = '創(chuàng)建者' ,related_name = 'deuser' ,blank = True ,null = True ,on_delete = models.SET_NULL) create_time = models.DateTimeField( '創(chuàng)建時(shí)間' ,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: #判斷是否是超級(jí)用戶 st = UserTB.objects.get(user = self .request.user) #找到用戶表里對(duì)應(yīng)的用戶 print 'st:' ,st sr = self .model.objects. filter (uploader = st) #找到該model 里該用戶創(chuàng)建的數(shù)據(jù) return sr return self .model.objects. all () xadmin.site.register(UnitPage,ProdeUnitDisplay) |
補(bǔ)充知識(shí):Django2集成xadmin詳解-5-獲取登錄用戶信息并填充相應(yīng)Model字段
一 場(chǎng)景問(wèn)題
繼續(xù)使用IDC Model,在此Model增加user字段,用于記錄添加當(dāng)前數(shù)據(jù)的用戶:
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 ) # 記錄創(chuàng)建該數(shù)據(jù)的用戶 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機(jī)房" verbose_name_plural = verbose_name |
問(wèn)題:如何在增加IDC數(shù)據(jù)的時(shí)候,獲取當(dāng)前登錄的用戶信息,并保存到user字段里?
二 解決方法
打開(kāi)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() |
三 總結(jié)
xadmin的文檔和資料比較少,這個(gè)問(wèn)題雖然也就三行代碼的事情,但是我在百度是沒(méi)找到解決方案的。
最終是查看xadmin的代碼摸索解決的。
那么,應(yīng)該查看哪部分代碼?考慮到這個(gè)操作是在保存數(shù)據(jù)的時(shí)候觸發(fā)的,那么就找xadmin處理保存操作(編輯界面)的代碼:
venv\Lib\site-packages\xadmin\views\edit.py
以上這篇Django --Xadmin 判斷登錄者身份實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/QQ1752506968/article/details/80772699