Добавить FormMixin в DetailView в Django - PullRequest
0 голосов
/ 29 августа 2018

Я хотел бы добавить форму в общий подробный вид. Официальная документация говорит, что это плохая идея, и в основном предлагает это:

from django import forms
from django.views.generic import DetailView
from books.models import Author

class AuthorInterestForm(forms.Form):
    message = forms.CharField()

class AuthorDisplay(DetailView):
    model = Author

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form'] = AuthorInterestForm()
        return context

и

from django.http import HttpResponseForbidden
from django.urls import reverse
from django.views.generic import FormView
from django.views.generic.detail import SingleObjectMixin

class AuthorInterest(SingleObjectMixin, FormView):
    template_name = 'books/author_detail.html'
    form_class = AuthorInterestForm
    model = Author

    def post(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return HttpResponseForbidden()
        self.object = self.get_object()
        return super().post(request, *args, **kwargs)

    def get_success_url(self):
        return reverse('author-detail', kwargs={'pk': self.object.pk})

Проще говоря, чтобы избежать конфликтов между одноименными функциями, которые выполняют разные задачи, лучше всего разбивать форму и отображать часть на две части. Что хорошо. Однако я не понимаю, как я должен вызвать соответствующий взгляд? Из вида сортировки выбора ниже? Как мне определить это в URL?

Вся идея заключалась в том, чтобы иметь один шаблон, который получал бы объект в контексте И не связанный с ->, который должен был бы привести к отправке, возвращающей POST к тому же представлению. Если мне нужно выбрать get () или post () из urls.py, это не совсем то, что я хочу.

from django.views import View

class AuthorDetail(View):

    def get(self, request, *args, **kwargs):
        view = AuthorDisplay.as_view()
        return view(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        view = AuthorInterest.as_view()
        return view(request, *args, **kwargs)

TNX

...