首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何访问请求对象或窗体的clean()方法中的任何其他变量?

如何访问请求对象或窗体的clean()方法中的任何其他变量?
EN

Stack Overflow用户
提问于 2009-06-29 08:49:46
回答 7查看 69.9K关注 0票数 103

我正在尝试请求一个表单的干净方法,但是我怎样才能访问request.user对象呢?我可以修改clean方法来允许变量输入吗?

EN

回答 7

Stack Overflow用户

发布于 2009-06-29 09:34:58

通常的做法是使用中间件将请求对象存储在线程本地引用中。然后,您可以从应用程序中的任何位置访问它,包括Form.clean()方法。

更改Form.clean()方法的签名意味着您拥有了修改后的Django版本,这可能不是您想要的。

感谢中间件计数看起来像这样:

代码语言:javascript
复制
import threading
_thread_locals = threading.local()

def get_current_request():
    return getattr(_thread_locals, 'request', None)

class ThreadLocals(object):
    """
    Middleware that gets various objects from the
    request object and saves them in thread local storage.
    """
    def process_request(self, request):
        _thread_locals.request = request

按照Django docs中的说明注册此中间件

票数 18
EN

Stack Overflow用户

发布于 2015-11-17 07:47:57

对于Django管理员,在Django 1.8中

代码语言:javascript
复制
class MyModelAdmin(admin.ModelAdmin):
    ...
    form = RedirectForm

    def get_form(self, request, obj=None, **kwargs):
        form = super(MyModelAdmin, self).get_form(request, obj=obj, **kwargs)
        form.request = request
        return form
票数 14
EN

Stack Overflow用户

发布于 2011-05-14 20:03:34

我在自定义管理员时遇到了这个特殊的问题。我希望根据特定管理员的凭据来验证某个字段。

由于我不想修改视图以将请求作为参数传递给表单,下面是我所做的:

代码语言:javascript
复制
class MyCustomForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def clean(self):
        # make use of self.request here

class MyModelAdmin(admin.ModelAdmin):
    form = MyCustomForm
    def get_form(self, request, obj=None, **kwargs):
        ModelForm = super(MyModelAdmin, self).get_form(request, obj=obj, **kwargs)
        def form_wrapper(*args, **kwargs):
            a = ModelForm(*args, **kwargs)
            a.request = request
            return a
    return form_wrapper
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1057252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档