2013-05-08 102 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()