一尘不染

Django:如何以管理表单获取当前用户

django

在Django的ModelAdmin中,我需要显示根据用户拥有的权限定制的表单。有没有一种方法可以将当前用户对象放入表单类,以便我可以在其__init__方法中自定义表单?
我认为将当前请求保存在线程本地中是一种可能,但这是我的最后选择,我认为这是一种不良的设计方法…。


阅读 729

收藏
2020-03-29

共1个答案

一尘不染

这是我最近为Blog做的事情:

class BlogPostAdmin(admin.ModelAdmin):
    form = BlogPostForm

    def get_form(self, request, **kwargs):
         form = super(BlogPostAdmin, self).get_form(request, **kwargs)
         form.current_user = request.user
         return form

现在,我可以forms.ModelForm通过访问self.current_user

编辑:这是一个老答案,最近看一下,我意识到该get_form方法应该修改为:

    def get_form(self, request, *args, **kwargs):
         form = super(BlogPostAdmin, self).get_form(request, *args, **kwargs)
         form.current_user = request.user
         return form

(请注意*args

2020-03-29