如何根据django管理面板中的登录用户清理表单数据?

时间:2010-04-13 06:54:50

标签: django django-admin django-forms

我在这里看了几个看似相似的问题,但没有人从管理面板的角度讨论这个问题。

我需要检查用户是否有权将字段留空。我想使用request.user,但我不知道如何将请求从EntryAdmin传递给ModelForm。我想做这样的事情:

class EntryAdminForm(ModelForm):
    class Meta:
        model = Entry

    def clean_category(self):
        if not self.request.user.has_perm('blog.can_leave_empty_category') and not bool(self.category):
            raise ValidationError(u'You need to choose a Category!')
        else:
            return self.cleaned_data['category']

1 个答案:

答案 0 :(得分:3)

您可以通过将请求添加为新创建的表单类的属性(应该是线程安全的)来覆盖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

然后你问题中的代码应该有效。