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

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

См.также

messages framework содержит 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)

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

Пример 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 ContactView(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>

CreateView

class django.views.generic.edit.CreateView

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

Предки (MRO)

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

Атрибуты

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 AuthorCreate(CreateView):
    model = Author
    fields = ['name']

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

<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Save">
</form>

UpdateView

class django.views.generic.edit.UpdateView

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

Предки (MRO)

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

Атрибуты

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 AuthorUpdate(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>

DeleteView

class django.views.generic.edit.DeleteView

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

Предки (MRO)

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

Атрибуты

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 AuthorDelete(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>
    <input type="submit" value="Confirm">
</form>
Вернуться на верх