Django:在forms.py clean函数中访问请求 [英] Django: Accessing request in forms.py clean function

查看:115
本文介绍了Django:在forms.py clean函数中访问请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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):
def get_form_kwargs(self):
kwargs = super(ItemCreate,sel f).get_form_kwargs()
kwargs.update({
'request':self.request
})
return kwargs
/ pre>

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's get_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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆