2017-06-28 25 views
0

如何訪問COMPANY_ID場形式輸入類爲本次得到form_class在視圖中表單輸入值

forms.py

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

我試圖重寫form_valid(),但沒」 t鍛鍊。 我也想將'obj'queryset轉換爲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)}) 

錯誤:

類型錯誤在/上傳/有限公司_產品/

INT()參數必須是字符串或數字,而不是 'builtin_function_or_method'

+0

您的表單可能無效,因此控件將無法觸及form_valid – Sid

+0

您在form_valid()中的行應該是帶有下劃線的id = form.cleaned_data ['company_id']'。嘗試覆蓋'form_invalid()'並檢查表單是否確實通過了驗證。 – zaidfazil

+0

@FazilZaid這裏只是一個錯字錯誤。在我的代碼中,它是'company_id'。我現在的問題是,我如何在ocject過濾器中引用此id。 –

回答

1

通過重寫post方法只需分配您已禁用應該發生在後期的所有其他操作,如驗證表格。您應該完全刪除該方法 - 在其他位置定義該列表,例如在form_valid中。

+0

這是一個類屬性。挑一個並堅持下去。 – Melvyn

+0

對不起,但是這是我在發佈問題時在縮進中輸入錯誤的問題。請看看編輯的問題 –

+1

這使情況變得更糟。您的form_valid版本現在不會被調用,因爲沒有'CompanyProduct.form_valid'。只有一個'CompanyProduct.post.form_valid'。正如丹尼爾所說,沒有必要重寫post方法。我只能想到一個或兩個案例,我需要這樣做。 – Melvyn

相關問題