如何根据django中的用户限制模型中的某些字段

How to restrict certain fields in a model based on the user in django

我有一个部门 table。还有一个 Student table 引用部门 table。我还创建了一个自定义用户模型,UserAugment,以将部门字段添加到默认用户模型。

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)

现在,我需要创建用户,他们将有一个部门附属于他们。并且每个用户都应该被授予 add/edit/view 属于他们部门的学生的权限。我正在做噩梦。真的很简单吗?感谢您提供的任何帮助。

您可以在后台管理权限控制:

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 权限。

好吧,这对我来说终于有用了,

 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)