Spec-Zone.ru › Django 5.2

Общие представления для редактирования

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

  • 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

Страница CreateView, отображаемая для запроса GET, использует template_name_suffix '_form'. Например, изменение этого атрибута на '_create_form' для представления, создающего объекты для модели Author, приведет к тому, что значение по умолчанию 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.

END_OF_DOCUMENT_MARKER

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

UpdateView страница, отображаемая в ответ на GET запрос, использует template_name_suffix суффикс '_form'. Например, изменение этого атрибута на '_update_form' для представления, обновляющего объекты для модели Author, приведет к тому, что значение по умолчанию 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

DeleteView страница, отображаемая в ответ на GET запрос, использует template_name_suffix суффикс '_confirm_delete'. Например, изменение этого атрибута на '_check_delete' для представления, удаляющего объекты для модели Author, приведет к тому, что значение по умолчанию 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/5.2/ref/class-based-views/generic-editing/

Spec-Zone.ru

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