0

我正在尝试为此问题找到某种规范参考,其中我使用以下类型模型:

class MyPreferencesForm(forms.Form):
    MyGenderPref = forms.MultipleChoiceField(choices=GENDER_CHOICES, widget=forms.CheckboxSelectMultiple())

和视图

def GoPreferences(request):
    if request.method == "POST":
        f = MyPreferencesForm(request.POST)
        if f.is_valid():
            model_instance = f.save(commit=False)
            model_instance.save()
            f.save_m2m()
            return redirect('/')
    else:
        f = MyPreferencesForm()

    return render(request, "mypreferences.html", {'form': f})

但是,我尝试遵循我认为明智的做法,并包括多对多。但我仍然无法完成这项工作。我的错误如下:

Exception Type: AttributeError
Exception Value:    
'MyPreferencesForm' object has no attribute 'save'

错误来自包含的行model_instance = f.save(commit=False)

4

2 回答 2

2

save仅适用于从ModelForm对象继承的表单。在这里,您正在继承表单forms.Form因此错误。

继承表单forms.ModelForm并指定Meta属性

class MyPreferencesForm(forms.ModelForm):
    MyGenderPref = forms.MultipleChoiceField(choices=GENDER_CHOICES, widget=forms.CheckboxSelectMultiple())
    class Meta:
        model = MyModel

您可以在此处阅读有关ModelForms 的更多信息- 您可能需要根据您的具体要求稍微修改您的表单。

或者

 model_instance = MyModel.objects.create(**form.cleaned_data) #manage manually
于 2013-09-18T23:09:41.120 回答
0

如果您的 models.py 中的 m2m 表使用,through那么您需要使用 object.create 手动管理保存,并且您不能使用 save_m2m() 或 save()

于 2013-09-19T01:30:27.957 回答