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

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

4.2 CRUD проект
4 из 12 шагов пройдено
0 из 60 баллов  получено

Применение модельных форм в CRUD проекте

Рассмотрим пример использования модельных форм в данном проекте. Модельная форма создаётся на основе выбранной модели, что упрощает как создание самой формы, так и последующую обработку данных.

Для начала изменим нашу форму в файле форм forms.py:

from django.forms import ModelForm, CharField, IntegerField
from .models import Person

class PersonForm(ModelForm):
    name = CharField(label='Введите имя')
    age = IntegerField(label='Введите возраст')

    class Meta:
        model = Person
        fields = ['name', 'age']

Теперь наша форма будет наследоваться от класса ModelForm, в мета-классе формы зададим имя модели model = Person, на основе которой будет создана форма и укажем используемые поля fields = ['name', 'age'].

Затем изменим представления create() и edit() в файле views.py:

from django.shortcuts import render
from django.http import HttpResponseRedirect, HttpResponseNotFound
from .models import Person
from .forms import PersonForm


# Получение данных из БД
def index(request):
    form = PersonForm()
    people = Person.objects.all()
    return render(request, 'index.html', {'form': form, 'people': people})


# Сохранение данных в БД
def create(request):
    if request.method == 'POST':
        form = PersonForm(request.POST)
        if form.is_valid():
            form.save()
    return HttpResponseRedirect('/')


# Изменение данных в БД
def edit(request, id):
    try:
        person = Person.objects.get(id=id)
        if request.method == 'POST':
            form = PersonForm(request.POST, instance=person)
            if form.is_valid():
                form.save()
            return HttpResponseRedirect('/')
        else:
            form = PersonForm(instance=person)
            return render(request, 'edit.html', {'form': form})
    except Person.DoesNotExist:
        return HttpResponseNotFound('<h2>Person not found</h2>')


# Удаление данных из БД
def delete(request, id):
    try:
        person = Person.objects.get(id=id)
        person.delete()
        return HttpResponseRedirect('/')
    except Person.DoesNotExist:
        return HttpResponseNotFound('<h2>Person not found</h2>')

Теперь в представлении create() достаточно проверить форму на валидность и если она валидна - сохранить её, воспользовавшись методом save().

В представлении edit() всё точно так-же, только необходимо передать в форму выбранный объект person:

PersonForm(request.POST, instance=person)

Обратите внимание, что без передачи выбранного объекта(instance=person) в форму, будет создана новая запись.


Как мы видим, использование форм Django существенно облегчает работу с HTML-формами, упрощает код представлений и шаблонов, позволяет выполнять валидацию данных, чтобы исключить попадание в БД некорректных данных.

Если у вас возникли трудности, вы можете посмотреть исходный код проекта на GitHub: https://github.com/Permin0ff/Course_CRUD_3.


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