2015-11-05 104 views
0

我有一個部門表。並引用部門表的學生表。我還創建了一個自定義用戶模型UserAugment,以將部門字段添加到默認用戶模型。如何在django中根據用戶限制模型中的某些字段

class Department(models.Model): 
    dname = models.CharField(max_length=200,primary_key=True) 

    def publish(self): 
     self.save() 

    def __str__(self): 
     return self.dname 

class UserAugment(AbstractUser): 
    department = models.ForeignKey(Department,null=True,blank=True) 
    objects = UserManager() 


class Student(models.Model): 
    sname = models.CharField(max_length=200) 
    usn = models.CharField(max_length=200,primary_key=True) 
    dept = models.ForeignKey(Department) 
    sem = models.IntegerField() 

    def publish(self): 
     self.save() 

    def __str__(self): 
     return '%s, %s' % (self.usn,self.sname) 

現在,我需要創建用戶,誰將有一個部門連接到他們。並且應該爲每個用戶授予添加/編輯/查看屬於他們部門的學生的權限。我正在做一個噩夢。它真的很簡單嗎?感謝任何會傾倒的幫助。

回答

0

好了,這是什麼終於爲我工作,

class StudentAdmin(admin.ModelAdmin): 
      def get_queryset(self, request): 
       qs = super(StudentAdmin, self).get_queryset(request) 
       if request.user.is_superuser: 
        return qs 
       return qs.filter(dept=request.user.department) 
0

你可以在管理管理權限控制:

class UserAdmin(admin.ModelAdmin): 

    def has_change_permission(self, request, obj=None): 
     return self.user_has_permission(request, obj) 

    def user_has_permission(self, request, obj): 
     if hasattr(request.user, 'department') and obj is not None: 
      return request.user.department == obj.dept 
     return False 

您可以實現editdelete權限相同的方式。

+0

對於一個組成部分,它提供了「WSGIRequest」對象有沒有屬性「OBJ」。對於第二部分,我不相信我的admin.py設置正確。我是否需要爲admin.py中的UserAugment()編寫任何相應的代碼?類似,admin.site.register(UserAugment,UserAdmin) –

+0

我在admin.py中粘貼了UserAdmin(admin.ModelAdmin)..我希望這是您提到UserAdmin時的錯字(models.ModelAdmin) –

+0

是的,對不起,修正它。是的,你需要admin.site.register(UserAugment,UserAdmin) –

相關問題