表格找不到保存方法

时间:2013-06-06 07:28:46

标签: django forms

我遇到了问题,我不知道它来自哪里。

我有这样的表格:

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('')

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

适用于ModelForm而不是Form。您的表单来自forms.Form

保存它ModelForm将返回已定义的模型实例。普通形式不知道要创建哪个对象,所以他们不能这样做。

参考ModelForms

答案 1 :(得分:1)

目前尚不清楚您要“保存”的内容,因为表单中的字段已填充了数据库中的记录。

看起来你想要做的是用仪表板更新所选对象,在这种情况下,使用它:

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

但是,这种类型的功能内置ModelForms,它们是直接链接到模型并具有数据库保存逻辑的表单。

答案 2 :(得分:0)

请不要使用这种语言。

只有ModelForms有保存方法。普通形式没有一个,因为它没有意义 - 它会节省什么?