2

我的 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 网站上的这个链接确实提到了一些线索,但我缺乏对框架的经验使我无法实现它......

4

1 回答 1

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
于 2014-01-06T16:47:11.677 回答