Spec-Zone.ru › Django 4.1

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

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

  • 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

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

Предки (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, использует суффикс '_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.

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, использует суффикс '_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
Добавлено в Django 4.0.

Унаследованно от 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 4.0:

В более ранних версиях, BaseDeleteView не наследуется от FormMixin.

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

Spec-Zone.ru

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