Django 5 для начинающих

Прогресс по курсу:  9/1004

10.9 Работа с CreateView. Добавление записей пользователями.
2 из 3 шагов пройдено
0 из 3 баллов  получено

Класс 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 прописываем необходимые поля при заполнении статьи с сайта.

  • Не добавляем createupdate, т.к они создаются автоматически.
  • В методе инициализации 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

На этом разработка формы и представлений закончена, в следующем шаге мы свяжем наши представления с маршрутами и добавим шаблоны.


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

@ilya_kutaev, Спасибо, поправил.

Наверное имелось ввиду "создания поста".

@Корнев_Степан, спасибо, исправил.