我正在尝试请求一个表单的干净方法,但是我怎样才能访问request.user对象呢?我可以修改clean方法来允许变量输入吗?
发布于 2009-06-29 09:34:58
通常的做法是使用中间件将请求对象存储在线程本地引用中。然后,您可以从应用程序中的任何位置访问它,包括Form.clean()方法。
更改Form.clean()方法的签名意味着您拥有了修改后的Django版本,这可能不是您想要的。
感谢中间件计数看起来像这样:
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中的说明注册此中间件
发布于 2015-11-17 07:47:57
对于Django管理员,在Django 1.8中
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
发布于 2011-05-14 20:03:34
我在自定义管理员时遇到了这个特殊的问题。我希望根据特定管理员的凭据来验证某个字段。
由于我不想修改视图以将请求作为参数传递给表单,下面是我所做的:
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
https://stackoverflow.com/questions/1057252
复制相似问题