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

任何的想法 ?

4

3 回答 3

1

ModelForm不可用Form。您的表单源自forms.Form.

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

请参阅ModelForms

于 2013-06-06T07:36:39.823 回答
1

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

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

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

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

于 2013-06-06T07:38:42.727 回答
0

请不要在这里使用那种语言。

只有 ModelForms 有保存方法。一个正常的形式没有一个,因为它没有意义 - 它会保存到什么?

于 2013-06-06T07:36:10.730 回答