仅限制某些用户在Django admin中修改列表显示中的行

仅限制某些用户在Django admin中修改列表显示中的行,django,django-admin,django-permissions,Django,Django Admin,Django Permissions,My models.py的外观如下所示: class Change(models.Model): RFC = models.CharField(max_length=10) Ticket_Number = models.CharField(max_length=10) Plan_Owner = models.ForeignKey(User) Plan_validater = models.ForeignKey(User) class ChangeAdmin(admin.

My models.py的外观如下所示:

class Change(models.Model):
   RFC = models.CharField(max_length=10)
   Ticket_Number = models.CharField(max_length=10)
   Plan_Owner = models.ForeignKey(User)
   Plan_validater = models.ForeignKey(User)
class ChangeAdmin(admin.ModelAdmin):
   search_fields = ('RFC', 'Ticket_Number','Plan_Owner','Plan_validater')
   list_display = ('RFC', 'Ticket_Number','Plan_Owner','Plan_validater')

   fieldsets = [
    ('Ticket Details', {
        'fields': ['RFC', 'Ticket_Number', 'Plan_Owner','Plan_validater']}),
   ]

   admin.site.register(Change, ChangeAdmin)
我的admin.py如下所示:

class Change(models.Model):
   RFC = models.CharField(max_length=10)
   Ticket_Number = models.CharField(max_length=10)
   Plan_Owner = models.ForeignKey(User)
   Plan_validater = models.ForeignKey(User)
class ChangeAdmin(admin.ModelAdmin):
   search_fields = ('RFC', 'Ticket_Number','Plan_Owner','Plan_validater')
   list_display = ('RFC', 'Ticket_Number','Plan_Owner','Plan_validater')

   fieldsets = [
    ('Ticket Details', {
        'fields': ['RFC', 'Ticket_Number', 'Plan_Owner','Plan_validater']}),
   ]

   admin.site.register(Change, ChangeAdmin)

我想要确保的是,只有特定更改的计划所有者或计划验证人可以编辑它。每个人都可以查看它,但对行的更改应仅限于更改或计划所有者。此外,他们只能编辑而不能删除它。只有超级用户可以添加或删除更改。django网站上确实提到了一些线索,但我对该框架缺乏经验,因此无法实现它……

应该是这样的:

class ChangeAdmin(ModelForm):


def clean(self):
    if self.request.user != self.Plan_Owner or self.request.user != self.Plan_validater or not :
        raise ValidationError(u'Permission denied')
    else:
        return self.cleaned_data
要访问当前用户,请通过将请求添加为新创建的表单类的属性来覆盖ModelAdmin.get_表单

class EntryAdmin(admin.ModelAdmin):
    form = EntryAdminForm

    def get_form(self, request, *args, **kwargs):
        form = super(EntryAdmin, self).get_form(request, *args, **kwargs)
        form.request = request
        return form

也许对你有帮助听起来你做得不对。为什么你要让用户访问网站的管理端?除非您正在构建某种类型的CMS,否则您可以为最终用户创建自己的站点端自定义权限。不要让用户使用管理端,让他们从网站本身开始做所有事情。你是否尝试使用clean功能检查用户是否拥有adequat rightsWell..我的应用程序足够简单,不会为面向公众的网站编写视图..所有事情都可以在django本身的管理面板内完成,因此我在管理中寻找更细粒度的权限..@ArmanceWissal…不..如何使用它?armance..谢谢..我了解检查权限和在表单中引发验证错误的第一部分。但是,我无法理解第二部分。我的应用程序中没有Entryadmin表单。它给了我一个错误这正是你需要第二部分的原因,如果不重写modeladmin,则无法访问请求