我遇到了问题,我不知道它来自哪里。
我有这样的表格:
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 :(得分: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有保存方法。普通形式没有一个,因为它没有意义 - 它会节省什么?