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

詳細については、ModelFormこちらをご覧ください。特定の要件に基づいて、フォームを少し変更する必要がある場合があります。

また

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

models.py の m2m テーブルが使用する場合、throughobject.create を使用して手動で保存を管理する必要があり、save_m2m() または save() は使用できません。

于 2013-09-19T01:30:27.957 に答える