Django:在forms.py clean函数中访问请求 [英] Django: Accessing request in forms.py clean function
问题描述
Hi Stackoverflow people,
在我的clean.py函数中,我想自动保存会话变量中的一些信息。但是,我似乎没有访问请求变量。
所有转发请求变量的示例都基于基于函数的视图,但是我在使用
我的forms.py:
from django import form
from item.models import Item
class CreateItemForm(forms.ModelForm):
class Meta:
model = Item
fields =('name','description')
def __init __(self,request,* args,** kwargs):
self.request = request
super(CreateItemForm,self).__ init __(* args,** kwargs)
def clean(self):
cleaning_data = super(CreateItemForm,self).clean()
如果clean_data.get(address):
self.request.session ['name'] = cleaning_data.get(name)
else:
raise forms.ValidationError(_ 哎呀,找不到位置。))
retu rn self.cleaned_data
我的views.py:
从django.views.generic.edit导入FormView
from item.forms import CreateItemForm
class ItemCreate FormView):
form_class = CreateItemForm
template_name ='item / item_create.html'
success_url ='http://www.google.com'
从视图中交出请求
变量的最佳方法是什么? py to forms.py?
感谢您的回答。
您可以覆盖 FormMixin
的 get_form_kwargs
方法将请求添加到表单的init参数中:
class ItemCreate(FormView):
/ pre>
def get_form_kwargs(self):
kwargs = super(ItemCreate,sel f).get_form_kwargs()
kwargs.update({
'request':self.request
})
return kwargs
Hi Stackoverflow people,
In my clean function in forms.py, I would like to save automatically some information in a session variable. However, I do not seem to get access to the request variable.
All examples for handing over the request variable are based on function based views, but here I am using a class based view.
My forms.py:
from django import forms from item.models import Item class CreateItemForm(forms.ModelForm): class Meta: model = Item fields = ('name', 'description') def __init__(self, request, *args, **kwargs): self.request = request super(CreateItemForm, self).__init__(*args, **kwargs) def clean(self): cleaned_data = super(CreateItemForm, self).clean() if cleaned_data.get("address"): self.request.session['name'] = cleaned_data.get("name") else: raise forms.ValidationError(_('Oops, can\'t find location.')) return self.cleaned_data
My views.py:
from django.views.generic.edit import FormView from item.forms import CreateItemForm class ItemCreate(FormView): form_class = CreateItemForm template_name = 'item/item_create.html' success_url = 'http://www.google.com'
What is the best way to hand over the
request
variable from the views.py to forms.py?Thank you for your answer.
解决方案You can overwrite the
FormMixin
'sget_form_kwargs
method to add the request for to the form's init parameters:class ItemCreate(FormView): def get_form_kwargs(self): kwargs = super(ItemCreate, self).get_form_kwargs() kwargs.update({ 'request' : self.request }) return kwargs
这篇关于Django:在forms.py clean函数中访问请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!