Класс CreateView в Django - это предопределенный класс, который позволяет создать модель и сохранить ее в базе данных с помощью формы. Он автоматически генерирует CRUD(Create, Read, Update, Delete) функциональность для модели.
Для использования класса CreateView, вы должны создать подкласс от него и указать модель, с которой будет работать представление, а также шаблон и форму, которые будут использоваться при создании объекта модели.
Создание формы для представления Create
Первым делом, в приложении blog мы создадим файл forms.py для модели Post. И добавим следующий код для реализации формы под модель наших статей для добавления и обновления:
from django import forms
from .models import Post
class PostCreateForm(forms.ModelForm):
"""
Форма добавления статей на сайте
"""
class Meta:
model = Post
fields = ('title', 'slug', 'category', 'description', 'text', 'thumbnail', 'status')
def __init__(self, *args, **kwargs):
"""
Обновление стилей формы под Bootstrap
"""
super().__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].widget.attrs.update({
'class': 'form-control',
'autocomplete': 'off'
})
В коде выше мы наследуемся от класса ModelForm. В классе Meta прописываем необходимые поля при заполнении статьи с сайта.
- Не добавляем
create,update, т.к они создаются автоматически.
- В методе инициализации
def __init__()мы добавляем стили подBootstrap, чтобы не прописывать каждое поле в форме.
Представление для создания статьи - CreateView
Создадим представление для создания записей в файле views.py нашего приложения blog.
from django.views.generic import CreateView
from .forms import PostCreateForm
class PostCreateView(CreateView):
"""
Представление: создание материалов на сайте
"""
model = Post
template_name = 'blog/post_create.html'
form_class = PostCreateForm
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['title'] = 'Добавление статьи на сайт'
return context
def form_valid(self, form):
form.instance.author = self.request.user
form.save()
return super().form_valid(form)
В примере выше мы наследуемся от класса CreateView. Импортируем нашу модель, а также форму.
В этом примере:
model = Post: Указывает модель, с которой будет работать представлениеPostCreateView.
form_class = PostCreateForm: Указывает, какую форму использовать для создания новой записи.
template_name = 'blog/post_create.html': Указывает шаблон, который будет использоваться для отображения формы создания поста.
Мы также используем методы класса CreateView:
- В
get_context_data()передаем заголовок для<title>нашего шаблона.
- В методе
form_valid()проверяем нашу форму, а также сохраняем автором текущего пользователя на странице, которого получаем из запросаself.request.user
На этом разработка формы и представлений закончена, в следующем шаге мы свяжем наши представления с маршрутами и добавим шаблоны.