Django combine DetailView et FormView

J'ai une vision où j'ai besoin d'afficher des informations sur un certain modèle de l'instance j'ai donc utiliser un DetailView. J'ai aussi besoin de ce même point de vue pour traiter une forme régulière (pas un modèle de formulaire), à la fois de l'affichage de la forme sur GET et de le valider sur POST. Pour ce faire, je suis en train d'utiliser un FormView cependant, la combinaison de deux clases ne fonctionne pas:

class FooView(FormView, DetailView):
    # configs here

Dans GET (pour des raisons de simplicité de la question, je ne montre que le problème avec GET depuis POST a un autre problème), il ne fonctionne pas parce que la forme n'est jamais ajouté au contexte. La raison a à voir avec la méthode de résolution de l'ordre pour la classe:

>>> inspect.getmro(FooView)
(FooView,
 django.views.generic.edit.FormView,
 django.views.generic.detail.DetailView,
 django.views.generic.detail.SingleObjectTemplateResponseMixin,
 django.views.generic.base.TemplateResponseMixin,
 django.views.generic.edit.BaseFormView,
 django.views.generic.edit.FormMixin,
 django.views.generic.detail.BaseDetailView,
 django.views.generic.detail.SingleObjectMixin,
 django.views.generic.base.ContextMixin,
 django.views.generic.edit.ProcessFormView,
 django.views.generic.base.View,
 object)

Dans la demande, Django a pour obtenir la forme et l'ajouter au contexte. Qui se passe dans ProcessFormView.get:

def get(self, request, *args, **kwargs):
    """
    Handles GET requests and instantiates a blank version of the form.
    """
    form_class = self.get_form_class()
    form = self.get_form(form_class)
    return self.render_to_response(self.get_context_data(form=form))

Cependant le premier de la classe avec la MRE qui a get défini est BaseDetailView:

def get(self, request, *args, **kwargs):
    self.object = self.get_object()
    context = self.get_context_data(object=self.object)
    return self.render_to_response(context)

Comme vous pouvez le voir le BaseDetailView.get n'appelle jamais super d'où le ProcessFormView.get ne sera jamais appelé d'où la forme ne sera pas ajouté au contexte. Ceci peut être résolu par la création d'un mixin point de vue où toutes ces nuances pour GET et POST peuvent être pris en charge, cependant je ne me sens pas c'est une solution propre.

Ma question: est-il possible d'accomplir ce que je veux avec Django par défaut de CBV mise en œuvre sans créer mixin?

source d'informationauteur miki725