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