DJANGO
在使用我的超级用户帐户的ADMIN PANEL中,我想授予用户查看/更改/删除某些对象的权限,而不是所有这些来自Model.By默认情况下在ADMIN PANEL中你可以给出整个模型的权限,而不是来自它的某些对象(模型)。
我会举个例子:
class Professor(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE)
lastname = models.CharField(max_length=25,null=True,blank=False)
firstname = models.CharField(max_length=25,null=True,blank=False)
email = models.EmailField(max_length=40,null=True,blank=False)
class Course(models.Model):
name = models.CharField(max_length=50,null=True,blank=False)
professor = models.ForeignKey(Professor,on_delete=models.CASCADE)
content = models.TextField(blank=True,null=True,help_text='')
例如,我将创建3个课程:X,Y,Z。 教授教Y和Z. 流程是:我的超级用户我将从管理员面板为这位教授创建一个用户,我将给他工作人员状态,我也想给他一个仅来自模型课程(Y和Z)的2个对象的权限,而不是所有人。所有其中我希望从管理面板更改为更容易。
我该怎么做?
在决赛中,我希望很容易从ADMIN PANEL获得权限,而不是从整个Model获得权限,而是从中获得一些对象。
非常感谢你。
答案 0 :(得分:0)
当您使用django管理员时,您可以使用has_change_permission
的ModelAdmin
方法:
class CourseAdmin(admin.ModelAdmin):
def has_change_permission(self, request, obj=None):
if obj is None:
return True
return request.user == obj.professor
注意:需要首先检查None
,因为文档说明:
如果obj为无,则应返回 True 或 False ,以指示是否允许查看此类型的对象。
这样可行,但列表视图仍会显示所有Course
个对象。让教授们很难知道他们可以编辑哪些教授。我们可以使用get_queryset
方法更改列表视图中显示的对象:
class CourseAdmin(admin.ModelAdmin):
def get_queryset(self, request):
queryset = super().get_queryset(request)
return queryset.filter(professor=request.user)
注意:您可能希望为超级用户编辑这两种方法。