小梅の日記帳

覚書き、メモ、等々残していくつもりです。

FormViewを使用する時のform_valid関数について

form_valid関数は、データがポストされた時に呼ばれるメソッドとのこと。

そして、HttpResponseを返さないといけないとのこと。

また、htmlの方には{{ form.as_p }}という表記で書かれたりしますが、

これは、pタグで囲って表示という意味。

<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Send message">
</form>

こんな感じになる。

from myapp.forms import ContactForm
from django.views.generic.edit import FormView

class ContactView(FormView):
    template_name = 'contact.html'
    form_class = ContactForm
    success_url = '/thanks/'

    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        form.send_email()
        return super().form_valid(form)

こちらはドキュメントから参考にしたソースコード。 success_urlというのが、form_valid()がリダイレクトするURLを指している。 なので、contact.htmlへ飛んで、実行されたら/thanks/へリダレクトされる。