【发布时间】: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