首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django绑定表单无效-如何获取默认验证工作?

Django绑定表单无效-如何获取默认验证工作?
EN

Stack Overflow用户
提问于 2012-08-02 14:23:37
回答 1查看 1.8K关注 0票数 0

我是django的新手,我正在为表单编写基于类的视图。问题是,这个表单呈现得很好,但在发布时我得到的表单是无效的。

我不确定我应该怎么做才能让默认验证器验证表单。表单中有两个字段。一个是选择字段,它的选择是根据登录的用户动态设置的。另一个是CharField。不需要验证,因为CharField是自由文本,而ChoiceField是基于用户数据的。

forms.py

代码语言:javascript
运行
复制
class HomeForm(forms.Form):
    phones= forms.ChoiceField(label='Select phone', choices = (), required=True)
    message = forms.CharField(max_length=10, required=True)

    def __init__(self, user, *args, **kwargs):
        super(HomeForm, self).__init__(*args, **kwargs)
        print >> sys.stderr, 'form init'

        self.fields['phones'].choices = [(ids.id, ids.phone_model.short_name) for ids in GCM_RegId.objects.filter(user=user)]

    def process(self, user):
        cd = self.cleaned_data
        regid_id = cd['phones'].value
        gcm_regid = GCM_RegId.objects.filter(id=regid_id)

views.py

代码语言:javascript
运行
复制
class HomeView(FormView):
    template_name = "home.html"
    form_class = HomeForm
    success_url = 'home'

    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if(form.is_bound):
            print >> sys.stderr, "Form is Bound"
        else:
            print >> sys.stderr, "Form is NOT Bound"

        if form.is_valid():
            print >> sys.stderr, "Form Valid"
            return self.form_valid(form)
        else:
            print >> sys.stderr, "Form NOT Valid"
            return self.form_invalid(form, **kwargs)       

    def get_form(self, form_class):
        form = HomeForm(self.request.user, {})
        return form

    def form_valid(self, form):
        form.process(self.request.user)
        print >> sys.stderr, "RegIdSubmitView form_valid"
        return super(HomeView, self).form_valid(form)   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-02 14:31:26

我猜问题是在创建form实例时,忘记将request.POST数据传递给form类,get_form方法应该是:

代码语言:javascript
运行
复制
def get_form(self, form_class):
    form = HomeForm(self.request.user, data=self.request.POST)
    return form

或者,我认为get_form更好的方式是:

代码语言:javascript
运行
复制
def get_form(self, form_class):
    return form_class(self.request.user, **self.get_form_kwargs()

查看django.views.generic.edit.FormMixin中get_form_kwargs方法的源代码,它会自动为您处理请求的PUT/POST数据和文件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11772087

复制
相关文章

相似问题

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