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

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

最佳答案

您可以覆盖 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

那么你问题中的代码应该可以工作。

关于django - 如何根据 django 管理面板中的登录用户清理表单数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2627565/

相关文章:

django - 不能分配必须是实例 Django

python - 在 django admin 中创建对象时如何自动插入当前用户?

django - 使用 sorl 的 django 管理面板中的缩略图

Django 注销按钮

python - Django 错误 : io. UnsupportedOperation: read and ValueError: bad mode 'rb'

python - 如何访问 Django 模板中的 AUTH_PROFILE_MODULE?

python - 如何从 csv 文件创建模型实例

python - Django 3.1 |管理员页面外观问题

django - 如何将 ModelForm 与 django-address 一起使用?

python - modelformset __iter__ 重载问题