【问题标题】:get form input value from form_class in views从视图中的 form_class 获取表单输入值
【发布时间】:2017-12-01 11:08:06
【问题描述】:

如何在基于类的视图中访问表单输入中的 company_id 字段

forms.py

    class CompanyProductForm(forms.Form):
        company_id = forms.IntegerField()

我尝试覆盖 form_valid() 但没有成功。 我还想将“obj”查询集转换为 python 列表,然后将其附加到产品中。

view.py

    class CompanyProduct(LoginRequiredMixin, UserPassesTestMixin, FormView):
        template_name = 'company_product.html'
        form_class = CompanyProductForm
        products = []

        def test_func(self):
            return self.request.user.is_staff

        def post(self, request, *args, **kwargs):
            self.products = []

            def form_valid(self, form):
                id = form.cleaned_data['company_id']
                return super(CompanyProduct, self).form_valid(form)

            obj = Product.objects.filter(company_id=id)



            return render(request, 'product_download.html',{'product':self.products,
                                                    'num':len(self.products)})

错误:

/upload/company_product/ 处的类型错误

int() 参数必须是字符串或数字,而不是 'builtin_function_or_method'

【问题讨论】:

  • 您的表单可能无效,因此无法控制 form_valid
  • 您在form_valid() 中的行应该是id = form.cleaned_data['company_id'] 并带有下划线。尝试覆盖form_invalid() 并检查表单是否真正通过了验证。
  • @FazilZaid 只是这里的拼写错误。在我的代码中,它是“company_id”。我现在的问题是如何在 ocject 过滤器中引用这个 id。
  • 你的尝试没有问题。你说它没有锻炼。有错误提示吗??或者您是否检查过您的表单是否真的通过了验证?此外,在form_valid() 函数中,最后一行应该调用super() 函数,而不是渲染模板。所以,把它改成return super(CompanyProduct, self).form_valid(form)
  • @FazilZaid 非常抱歉,我在发布问题时使用了错误的缩进,现在我已经按照我写的方式编辑了问题。请立即查看

标签: django python-2.7 django-forms django-views


【解决方案1】:

通过仅用一个赋值覆盖post 方法,您已经禁用了所有其他应该在发布时发生的操作,例如验证表单。您应该完全删除该方法 - 在其他位置定义该列表,例如在 form_valid 中。

【讨论】:

  • 那是一个类属性。选择一个并坚持下去。
  • 很抱歉,这是我在发布问题时缩进的错字问题。请查看已编辑的问题
  • 那就更糟了。现在永远不会调用您的 form_valid 版本,因为没有 CompanyProduct.form_valid。只有一个CompanyProduct.post.form_valid。正如丹尼尔所说,没有必要重写 post 方法。我只能想到一两种情况,我需要这样做。
  • @Melvyn 你能告诉我该怎么做才能获得表单输入并将查询集附加到列表中
  • 删除你的post方法并将form_valid恢复到正常缩进。
猜你喜欢
  • 2017-02-21
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多