Общие представления редактирования¶
Следующие виды описаны на этой странице и служат основой для редактирования содержимого:
django.views.generic.edit.FormViewdjango.views.generic.edit.CreateViewdjango.views.generic.edit.UpdateViewdjango.views.generic.edit.DeleteView
См.также
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)
Это представление наследует методы и атрибуты от следующих представлений:
django.views.generic.base.TemplateResponseMixindjango.views.generic.edit.BaseFormViewdjango.views.generic.edit.FormMixindjango.views.generic.edit.ProcessFormViewdjango.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 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)
Это представление наследует методы и атрибуты от следующих представлений:
django.views.generic.detail.SingleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.edit.BaseCreateViewdjango.views.generic.edit.ModelFormMixindjango.views.generic.edit.FormMixindjango.views.generic.detail.SingleObjectMixindjango.views.generic.edit.ProcessFormViewdjango.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 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)
Это представление наследует методы и атрибуты от следующих представлений:
django.views.generic.detail.SingleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.edit.BaseUpdateViewdjango.views.generic.edit.ModelFormMixindjango.views.generic.edit.FormMixindjango.views.generic.detail.SingleObjectMixindjango.views.generic.edit.ProcessFormViewdjango.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 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)
Это представление наследует методы и атрибуты от следующих представлений:
django.views.generic.detail.SingleObjectTemplateResponseMixindjango.views.generic.base.TemplateResponseMixindjango.views.generic.edit.BaseDeleteViewdjango.views.generic.edit.DeletionMixindjango.views.generic.detail.BaseDetailViewdjango.views.generic.detail.SingleObjectMixindjango.views.generic.base.View
Атрибуты
-
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>