項目中常常會遇到用戶權限管理的問題,django adminsite已經提供很是實用的用戶權限管理機制。不過有些時候,咱們但願根據相關用戶屬性來過濾adminsite中顯示的內容。下文將結束如何實現:
假設我有這麼一個問卷類,基於這個類能夠實現增刪改查的功能django
class wenjuan(models.Model): """ 問卷 """ name=models.CharField(u'問卷名稱',max_length=128) breif=models.TextField(u'問卷簡介') zhichixinxi=models.TextField(u'支持信息',default=u'技術支持',null=True,blank=True) danwei=models.ForeignKey(Department, verbose_name=u'所屬單位') status = models.SmallIntegerField(choices=WENJUAN_STATUS, verbose_name=u'狀態') fabu_time = models.DateTimeField(verbose_name=u'發佈日期',null=True,blank=True) jiezhi_time = models.DateTimeField(verbose_name=u'截止日期',null=True,blank=True) create_time = models.DateTimeField(auto_now=True, verbose_name=u'建立日期',null=True,blank=True) cjUser=models.ForeignKey(Users,related_name='users_cj', verbose_name=u'所屬用戶',null=True,blank=True) def __unicode__(self): return self.name class Meta: verbose_name = u"問卷" verbose_name_plural = verbose_name #app_label = _(u'b')
基於子類實現根據權限進行不一樣顯示,在demo項目中,咱們將實現用戶只能查詢本身的建立的問卷app
class chakanWenjuan(wenjuan): class Meta: proxy=True verbose_name=_(u'統計結果') verbose_name_plural=_(u'統計結果')
xadminx中,咱們須要設置一下queryset 過濾code
#------------------------------------------------- class chakanWenjuanAdmin(object): list_display = ('name','danwei','cjUser',) reversion_enable = True search_fields = ['name',] def queryset(self): qs = super(chakanWenjuanAdmin, self).queryset() if self.user.is_superuser: return qs else: myuser=Users.objects.get(user__id=self.user.id) return qs.filter(cjUser=myuser) xadmin.site.register(chakanWenjuan,chakanWenjuanAdmin)
若是是超級用戶,那麼所有顯示。若是是普通用戶,根據user進行篩選。unicode
下一篇將介紹,如何在adminsite中自定義列get