Django edit.py Вопрос по ProcessFormView()
class ProcessFormView(View):
"""Render a form on GET and processes it on POST."""
def get(self, request, *args, **kwargs):
"""Handle GET requests: instantiate a blank version of the form."""
return self.render_to_response(self.get_context_data())
def post(self, request, *args, **kwargs):
"""
Handle POST requests: instantiate a form instance with the passed
POST variables and then check if it's valid.
"""
**form = self.get_form()**
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
# PUT is a valid HTTP verb for creating (with a known URL) or editing an
# object, note that browsers only support POST for now.
def put(self, *args, **kwargs):
return self.post(*args, **kwargs)
В этой части нет части, которая импортируется путем наследования self.get_form(), self.form_valid(), поэтому мне интересно, как импортировать ее и просто использовать.
Это неполный код? Чтобы использовать его нормально, я должен использовать "ProcessFormView(View, ModelFormMixin)" вот так?
Версия Django, которую я использую, - 4.1.5
Интересно, почему это вдруг появилось? Понятие наследования, безусловно, существует, но у меня есть сомнения, не нарушает ли оно его. В качестве примера вы можете увидеть, что другие коды наследуются очень хорошо.
``Класс BaseDeleteView(DeletionMixin, FormMixin, BaseDetailView): """ Базовое представление для удаления объекта.
Using this base class requires subclassing to provide a response mixin.
"""
form_class = Form
def __init__(self, *args, **kwargs):
# RemovedInDjango50Warning.
if self.__class__.delete is not DeletionMixin.delete:
warnings.warn(
f"DeleteView uses FormMixin to handle POST requests. As a "
f"consequence, any custom deletion logic in "
f"{self.__class__.__name__}.delete() handler should be moved "
f"to form_valid().",
DeleteViewCustomDeleteWarning,
stacklevel=2,
)
super().__init__(*args, **kwargs)
def post(self, request, *args, **kwargs):
# Set self.object before the usual form processing flow.
# Inlined because having DeletionMixin as the first base, for
# get_success_url(), makes leveraging super() with ProcessFormView
# overly complex.
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):
success_url = self.get_success_url()
self.object.delete()
return HttpResponseRedirect(success_url)
`