2013-05-08 49 views
3

以下是我的表格:無法保存的形式在Django(對象有「保存」無屬性)

class AdvancedSearchForm(forms.Form): 
    valueofres = forms.ChoiceField (label="res", choices = ((0, 0),(2.2, 2.2)), required= False) 

以下是我的觀點:

def advancedsearch(request): 
    if request.method == "POST": 
     search = AdvancedSearchForm(request.POST, request.FILES) 
     if search.is_valid(): 
      new_search = search.save(commit=False) 

我越來越錯誤'AdvancedSearchForm' object has no attribute 'save' ...爲什麼?

+4

'save'僅適用於'ModelForm'默認情況下,而不是'forms.Form' – karthikr 2013-05-08 14:16:05

回答

8

save僅適用於ModelForm在默認情況下,而不是爲forms.Form

你需要做的是:1。 既可以使用`

class AdvancedSearchForm(forms.ModelForm): 
    valueofres = forms.ChoiceField (label="res", choices = ((0, 0),(2.2, 2.2)), required= False) 
    class Meta: 
     model=Search #or whatever object 

OR

2 )

def advancedsearch(request): 
    if request.method == "POST": 
     search_form = AdvancedSearchForm(request.POST, request.FILES) 
     if search.is_valid(): 
      cd = search_form.cleaned_data 
      search = #populate SearchObject() 
      search.save() 
+0

在方案1中,您需要使用'forms.ModelForm' – rockingskier 2013-05-08 14:50:55

+0

哎呀.. :)謝謝。 – karthikr 2013-05-08 14:51:23

+0

不用擔心,幫助你做出比我更好的答案... – rockingskier 2013-05-08 15:18:36

5

Form s沒有save()方法。

您需要使用ModelFormdocs),因爲那樣會有一個model與之關聯,並知道在哪裏保存。

或者你可以保留你的forms.Form,但是你會想要然後從數據中提取有效的數據並按照你的數據來做。

if request.method == "POST": 
    search_form = AdvancedSearchForm(request.POST, request.FILES) 
    if search_form.is_valid(): 
     cd = search_form.cleaned_data 

     search = Search(
      # Apply form data 
     ) 
     search.save()