РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
317 of 818 menu

Класс CreateView

Класс CreateView наследуется от SingleObjectMixin и FormView, объединяя их функциональность для удобного создания объектов. При GET-запросе представление отображает пустую форму для заполнения. При POST-запросе с валидными данными форма сохраняется, и пользователь перенаправляется на указанный URL. Для работы с представлением необходимо определить модель или указать класс формы, а также задать список полей, которые будут включены в форму. Важным атрибутом является fields, который определяет, какие поля модели будут отображаться в форме создания.

Синтаксис

from django.views.generic.edit import CreateView from .models import Article class ArticleCreateView(CreateView): model = Article fields = ['title', 'content', 'status'] template_name = 'article_create.html' success_url = '/articles/'

Параметры

Основные атрибуты класса CreateView:

  • model - модель, для которой создается объект.
  • fields - список полей модели, которые будут включены в форму.
  • form_class - класс формы, если требуется кастомизация.
  • template_name - шаблон для отображения формы.
  • success_url - URL для перенаправления после успешного сохранения.
  • context_object_name - имя переменной в контексте для объекта.

Пример

Создадим представление для добавления новой статьи:

from django.views.generic.edit import CreateView from django.urls import reverse_lazy from .models import Article class ArticleCreateView(CreateView): model = Article fields = ['title', 'content', 'author'] template_name = 'articles/create.html' success_url = reverse_lazy('articles_list')

Результат выполнения кода:

"Redirects to /articles/ after successful creation"

Пример

Использование кастомной формы и переопределение метода для валидации:

from django.views.generic.edit import CreateView from django.urls import reverse_lazy from .forms import ArticleForm from .models import Article class ArticleCreateView(CreateView): model = Article form_class = ArticleForm template_name = 'articles/create.html' success_url = reverse_lazy('articles_list') def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['page_title'] = 'Create New Article' return context def form_valid(self, form): form.instance.author = self.request.user return super().form_valid(form)

Результат выполнения кода:

"Article created with author set to current user"

Пример

Использование CreateView с моделью, содержащей связи ManyToMany:

from django.views.generic.edit import CreateView from django.urls import reverse_lazy from .models import Post, Category class PostCreateView(CreateView): model = Post fields = ['title', 'content', 'categories'] template_name = 'posts/create.html' success_url = reverse_lazy('posts_list') def form_valid(self, form): response = super().form_valid(form) self.object.categories.set(form.cleaned_data['categories']) return response

Результат выполнения кода:

"Post created with selected categories"

Пример

Переопределение метода get_success_url для динамического определения URL после создания объекта:

from django.views.generic.edit import CreateView from django.urls import reverse from .models import Product class ProductCreateView(CreateView): model = Product fields = ['name', 'price', 'category'] template_name = 'products/create.html' def get_success_url(self): return reverse('product_detail', kwargs={'pk': self.object.pk})

Результат выполнения кода:

"Redirects to product detail page after creation"

Смотрите также

  • класс UpdateView,
    который используется для редактирования существующих объектов
  • класс DeleteView,
    который предназначен для удаления объектов
  • класс FormView,
    который является базовым классом для форм
  • класс ListView,
    который используется для вывода списка объектов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить