仅限某些用户修改Django管理员列表显示中的行

时间:2014-01-03 15:33:43

标签: django django-admin django-permissions

我的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)

我的admin.py看起来像这样:

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网站上的This link确实提到了一些线索,但我缺乏框架经验阻止我实施它......

1 个答案:

答案 0 :(得分:1)

它应该是这样的:

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_form。

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