neu*_*rix 12 django request django-forms django-class-based-views
嗨Stackoverflow人,
在forms.py中的clean函数中,我想在会话变量中自动保存一些信息.但是,我似乎无法访问请求变量.
切换请求变量的所有示例都基于基于函数的视图,但在这里我使用的是基于类的视图.
我的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
Run Code Online (Sandbox Code Playgroud)
我的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'
Run Code Online (Sandbox Code Playgroud)
request将views.py中的变量移交给forms.py 的最佳方法是什么?
谢谢您的回答.
Tim*_*ony 17
您可以覆盖FormMixin的get_form_kwargs方法添加请求到窗体的初始化参数:
class ItemCreate(FormView):
def get_form_kwargs(self):
kwargs = super(ItemCreate, self).get_form_kwargs()
kwargs.update({
'request' : self.request
})
return kwargs
Run Code Online (Sandbox Code Playgroud)