Spec-Zone.ru › Django 6.0

Универсальные представления для редактирования

На этой странице описаны следующие представления, составляющие основу для редактирования содержимого:

  • django.views.generic.edit.FormView
  • django.views.generic.edit.CreateView
  • django.views.generic.edit.UpdateView
  • django.views.generic.edit.DeleteView

См. также

Фреймворк сообщений содержит SuccessMessageMixin, который упрощает отображение сообщений об успешной отправке форм.

Примечание

В некоторых примерах на этой странице предполагается, что модель Author определена в myapp/models.py следующим образом:

from django.db import models
from django.urls import reverse


class Author(models.Model):
    name = models.CharField(max_length=200)

    def get_absolute_url(self):
        return reverse("author-detail", kwargs={"pk": self.pk})

FormView

class django.views.generic.edit.FormView

Представление, отображающее форму. При ошибке форма отображается повторно с ошибками проверки; при успешной отправке выполняется перенаправление на новый URL.

Предки (MRO)

Это представление наследует методы и атрибуты следующих представлений:

  • django.views.generic.base.TemplateResponseMixin
  • django.views.generic.edit.BaseFormView
  • django.views.generic.edit.FormMixin
  • django.views.generic.edit.ProcessFormView
  • django.views.generic.base.View

Пример myapp/forms.py:

from django import forms


class ContactForm(forms.Form):
    name = forms.CharField()
    message = forms.CharField(widget=forms.Textarea)

    def send_email(self):
        # send email using the self.cleaned_data dictionary
        pass

Пример myapp/views.py:

from myapp.forms import ContactForm
from django.views.generic.edit import FormView


class ContactFormView(FormView):
    template_name = "contact.html"
    form_class = ContactForm
    success_url = "/thanks/"

    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        form.send_email()
        return super().form_valid(form)

Пример myapp/contact.html:

<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Send message">
</form>
class django.views.generic.edit.BaseFormView

Базовое представление для отображения формы. Оно не предназначено для непосредственного использования, а служит родительским классом для django.views.generic.edit.FormView и других представлений, отображающих форму.

Предки (MRO)

Это представление наследует методы и атрибуты следующих представлений:

  • django.views.generic.edit.FormMixin
  • django.views.generic.edit.ProcessFormView

CreateView

class django.views.generic.edit.CreateView

Представление, отображающее форму для создания объекта, повторно отображающее форму с ошибками проверки (если они есть) и сохраняющее объект.

Предки (MRO)

Это представление наследует методы и атрибуты следующих представлений:

  • django.views.generic.detail.SingleObjectTemplateResponseMixin
  • django.views.generic.base.TemplateResponseMixin
  • django.views.generic.edit.BaseCreateView
  • django.views.generic.edit.ModelFormMixin
  • django.views.generic.edit.FormMixin
  • django.views.generic.detail.SingleObjectMixin
  • django.views.generic.edit.ProcessFormView
  • django.views.generic.base.View

Атрибуты

template_name_suffix

Для запроса GET отображается страница CreateView, имя которой образуется добавлением template_name_suffix к '_form'. Например, если для представления, создающего объекты модели-примера Author, изменить этот атрибут на '_create_form', то значением template_name по умолчанию станет 'myapp/author_create_form.html'.

object

При использовании CreateView доступен self.object — создаваемый объект. Если объект ещё не создан, значение будет равно None.

Пример myapp/views.py:

from django.views.generic.edit import CreateView
from myapp.models import Author


class AuthorCreateView(CreateView):
    model = Author
    fields = ["name"]

Пример myapp/author_form.html:

<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Save">
</form>
class django.views.generic.edit.BaseCreateView

Базовое представление для создания нового экземпляра объекта. Оно не предназначено для непосредственного использования, а служит родительским классом для django.views.generic.edit.CreateView.

Предки (MRO)

Это представление наследует методы и атрибуты следующих представлений:

  • django.views.generic.edit.ModelFormMixin
  • django.views.generic.edit.ProcessFormView

Методы

get(request, *args, **kwargs)

Устанавливает текущий экземпляр объекта (self.object) в значение None.

post(request, *args, **kwargs)

Устанавливает текущий экземпляр объекта (self.object) в значение None.

UpdateView

class django.views.generic.edit.UpdateView

Представление, отображающее форму для редактирования существующего объекта, повторно отображающее форму с ошибками проверки (если они есть) и сохраняющее изменения объекта. Форма автоматически создаётся на основе класса модели объекта (если только класс формы не указан явно).

Предки (MRO)

Это представление наследует методы и атрибуты следующих представлений:

  • django.views.generic.detail.SingleObjectTemplateResponseMixin
  • django.views.generic.base.TemplateResponseMixin
  • django.views.generic.edit.BaseUpdateView
  • django.views.generic.edit.ModelFormMixin
  • django.views.generic.edit.FormMixin
  • django.views.generic.detail.SingleObjectMixin
  • django.views.generic.edit.ProcessFormView
  • django.views.generic.base.View

Атрибуты

template_name_suffix

Для запроса GET отображается страница UpdateView, имя которой образуется добавлением template_name_suffix к '_form'. Например, если для представления, обновляющего объекты модели-примера Author, изменить этот атрибут на '_update_form', то значением template_name по умолчанию станет 'myapp/author_update_form.html'.

object

При использовании UpdateView доступен self.object — обновляемый объект.

Пример myapp/views.py:

from django.views.generic.edit import UpdateView
from myapp.models import Author


class AuthorUpdateView(UpdateView):
    model = Author
    fields = ["name"]
    template_name_suffix = "_update_form"

Пример myapp/author_update_form.html:

<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Update">
</form>
class django.views.generic.edit.BaseUpdateView

Базовое представление для обновления существующего экземпляра объекта. Оно не предназначено для непосредственного использования, а служит родительским классом для django.views.generic.edit.UpdateView.

Предки (MRO)

Это представление наследует методы и атрибуты следующих представлений:

  • django.views.generic.edit.ModelFormMixin
  • django.views.generic.edit.ProcessFormView

Методы

get(request, *args, **kwargs)

Устанавливает текущий экземпляр объекта (self.object).

post(request, *args, **kwargs)

Устанавливает текущий экземпляр объекта (self.object).

DeleteView

class django.views.generic.edit.DeleteView

Представление, отображающее страницу подтверждения и удаляющее существующий объект. Указанный объект будет удалён, только если методом запроса является POST. При получении этого представления через GET отображается страница подтверждения, которая должна содержать форму, отправляющую POST-запрос на тот же URL.

Предки (MRO)

Это представление наследует методы и атрибуты следующих представлений:

  • django.views.generic.detail.SingleObjectTemplateResponseMixin
  • django.views.generic.base.TemplateResponseMixin
  • django.views.generic.edit.BaseDeleteView
  • django.views.generic.edit.DeletionMixin
  • django.views.generic.edit.FormMixin
  • django.views.generic.base.ContextMixin
  • django.views.generic.detail.BaseDetailView
  • django.views.generic.detail.SingleObjectMixin
  • django.views.generic.base.View

Атрибуты

form_class

Унаследован от BaseDeleteView. Класс формы, используемый для подтверждения запроса. По умолчанию используется django.forms.Form, в результате чего создаётся пустая форма, которая всегда проходит проверку.

Предоставив собственный подкласс Form, вы можете добавить дополнительные требования, например флажок подтверждения.

template_name_suffix

Для запроса GET отображается страница DeleteView, имя которой образуется добавлением template_name_suffix к '_confirm_delete'. Например, если для представления, удаляющего объекты модели-примера Author, изменить этот атрибут на '_check_delete', то значением template_name по умолчанию станет 'myapp/author_check_delete.html'.

Пример myapp/views.py:

from django.urls import reverse_lazy
from django.views.generic.edit import DeleteView
from myapp.models import Author


class AuthorDeleteView(DeleteView):
    model = Author
    success_url = reverse_lazy("author-list")

Пример myapp/author_confirm_delete.html:

<form method="post">{% csrf_token %}
    <p>Are you sure you want to delete "{{ object }}"?</p>
    {{ form }}
    <input type="submit" value="Confirm">
</form>
class django.views.generic.edit.BaseDeleteView

Базовое представление для удаления экземпляра объекта. Оно не предназначено для непосредственного использования, а служит родительским классом для django.views.generic.edit.DeleteView.

Предки (MRO)

Это представление наследует методы и атрибуты следующих представлений:

  • django.views.generic.edit.DeletionMixin
  • django.views.generic.edit.FormMixin
  • django.views.generic.detail.BaseDetailView

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/ref/class-based-views/generic-editing/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API