﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
30648	"Overriding get_context_data() is unnecessary in the ""Using FormMixin with DetailView"" example."	Davit Gachechiladze	Davit Gachechiladze	"The following code snippet is from https://docs.djangoproject.com/en/2.2/topics/class-based-views/mixins/#using-formmixin-with-detailview

 
{{{
CAUTION: you almost certainly do not want to do this.
# It is provided as part of a discussion of problems you can
# run into when combining different generic class-based view
# functionality that is not designed to be used together.

from django import forms
from django.http import HttpResponseForbidden
from django.urls import reverse
from django.views.generic import DetailView
from django.views.generic.edit import FormMixin
from books.models import Author

class AuthorInterestForm(forms.Form):
    message = forms.CharField()

class AuthorDetail(FormMixin, DetailView):
    model = Author
    form_class = AuthorInterestForm

    def get_success_url(self):
        return reverse('author-detail', kwargs={'pk': self.object.pk})

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form'] = self.get_form()
        return context

    def post(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return HttpResponseForbidden()
        self.object = self.get_object()
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def form_valid(self, form):
        # Here, we would record the user's interest using the message
        # passed in form.cleaned_data['message']
        return super().form_valid(form)
}}}

{{{get_success_url()}}} is just providing somewhere to redirect to, which gets used in the default implementation of {{{form_valid()}}}. We have to provide our own post() as noted earlier, and override {{{get_context_data()}}} to make the {{{Form}}} available in the context data.

Sentence above is mistake, isn't it ? Because {{{get_context_data()}}} does not require override to capture {{{Form}}} inside context. It's done automatically by {{{FormMixin}}}."	Cleanup/optimization	closed	Documentation	master	Normal	fixed			Accepted	1	0	0	0	1	0
