3

Django フォームを使用して、Django ユーザーが 3 つのお気に入りの興味を入力できるようにしようとしています。エラーは、テンプレートのレンダリング中に発生します{{form.as_ul}}

コードは次のとおりです。

reg_interests.html

{% block content %}

<br><br>
<h1>Choose the 3 things that interest you most!</h1>

<form method="post" action="/reg_interests/">
    {% csrf_token %}
    {{form.as_ul}}
    <br>
    <p class="submit"><input  class="btn btn-default" type="submit" name="commit" value="Continue"></p>
</form>

{% endblock %}

ビュー.py

def reg_interests_view(request):
    if request.POST:
        form = InterestsForm(request.POST, request=request)
        if form.is_valid():
            form.save(request)
            return redirect('/reg_video/')

    args = {}
    args['form'] = InterestsForm(request=request)

    return render(request, 'login/reg_interests.html', args)

フォーム.py

class InterestsForm(RequestModelForm):
    interest1 = forms.ChoiceField(choices=[(1, "Option 1"), (2, "Option 2")])
    interest2 = forms.ChoiceField(choices=[(1, "Option 1"), (2, "Option 2")])
    interest3 = forms.ChoiceField(choices=[(1, "Option 1"), (2, "Option 2")])

    class Meta:
        model = Interest
        fields = ('interest1', 'interest2', 'interest3')

    def __init__(self, request):
        self.user = request.user

    def save(self, commit=True):
        interest = super(InterestsForm, self).save(commit=False)
        interest.user = self.user
        interest.interest1 = self.cleaned_data['interest1']
        interest.interest2 = self.cleaned_data['interest2']
        interest.interest3 = self.cleaned_data['interest3']

        if commit:
            interest.save()

        return interest

フォームに問題があると思いますが、 を定義する方法や理由がわかりません_errors。Django 自体がそれを処理するべきではありませんか? そうでない場合、どのように定義します_errorsか?

4

1 に答える 1

10

__init__このコードは、フォームのメソッドをオーバーライドして、a)request引数のみを受け入れ、フォームが期待する他のもの (dataまたはなど) を受け入れないようにするため、まったく機能しない可能性がありますinitial。スーパークラスの init メソッドを使用して、フォーム コードの残りの部分が期待するものを初期化します。署名を保持し、super を呼び出す必要があります。

def __init__(self, *args, **kwargs):
     request = kwargs.pop('request')
     self.user = request.user
     super(InterestsForm, self).__init__(*args, **kwargs)
于 2016-08-12T17:05:47.810 に答える