2013-06-06 84 views
0

我有一個問題,我不知道它從何而來。表單無法找到保存方法

我有這種形式:

class LinkWidgetToDashboardForm(forms.Form): 
    widget = forms.MultipleChoiceField(
       choices = [(w.pk, w.name) for w in Widget.objects.all()] 
      ) 

沒什麼特別的,但我不能保存,導航返回我

'LinkWidgetToDashboardForm' object has no attribute 'save' 

,事實上,如果我在我的表單實例應用dir(),沒有保存方法。

只是爲了信息

def linkWidgetToDashboard(request): 
    if request.method == 'POST': 
     form = LinkWidgetToDashboardForm(request.POST) 
     if form.is_valid(): 
      o = form.save(commit=False) 
      o.dashboard = Dashboard.object.get(pk=1) 
      o.widget = form.cleaned_data['widget'] 
      o.save() 
    return HttpResponse('') 

任何想法?

+0

Form類只是代表了領域,如果你想保存你應該創建一個保存功能,或者使用具有保存功能的ModelForm。 – Charl

+0

應該回答沒有評論哈哈 – Charl

回答

1

由於表單中的字段已經填充了數據庫中的記錄,因此您不清楚要「保存」什麼。

它看起來像你想要做的是更新了儀表板所選擇的對象是什麼,在這種情況下,使用此:

if form.is_valid(): 
    widget = Widget.objects.get(pk=form.cleaned_data['widget']) 
    widget.dashboard = Dashboard.objects.get(pk=1) 
    widget.save() 

然而,這種類型的功能是內置有ModelForms,這是直接鏈接到模型並具有數據庫保存邏輯的表單。

0

無需在這裏,語言,請。

只有ModelForms有保存方法。一個正常的形式沒有一個,因爲它沒有任何意義 - 它會保存什麼?

1

它可用於ModelForm而不是Form。您的表單來自forms.Form

保存它ModelForm將返回您已定義模型的實例。正常形式不知道要創建哪個對象,因此他們不能這樣做。

請參閱ModelForms