开发者

How to clean form data depending on logged-in user in django admin panel?

I've looked at several questions here that looked similar, but none of them discussed开发者_如何学运维 the problem from the perspective of admin panel.

I need to check if user has permission to leave a field empty. I wanted to use request.user but I don't knot how to pass request from EntryAdmin to ModelForm. I wanted to do something like this:

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']


You could override the ModelAdmin.get_form, by adding the request as an attribute of the newly created form class (should be thread-safe).

Something along these lines:

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

Then the code in your question should work.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜