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

Класс ModelForm

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

Основные параметры ModelForm:

  • model - модель, на основе которой создается форма (обязательный параметр в Meta-классе);
  • fields - список полей модели, которые должны быть включены в форму (обязательный параметр либо используйте exclude);
  • exclude - список полей модели, которые должны быть исключены из формы;
  • instance - экземпляр модели, который используется для заполнения формы данными (передается при создании объекта формы);
  • initial - словарь с начальными значениями полей формы.

Синтаксис

from django import forms from .models import Article class ArticleForm(forms.ModelForm): class Meta: model = Article fields = ['title', 'content', 'status'] # или exclude = ['created_at']

Пример

Давайте создадим модель Article и форму для нее:

from django.db import models class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() status = models.CharField(max_length=20) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title
from django import forms from .models import Article class ArticleForm(forms.ModelForm): class Meta: model = Article fields = ['title', 'content', 'status'] # Создание формы для новой записи form = ArticleForm() print(form.as_p())

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

"<p><label for='id_title'>Title:</label> <input type='text' name='title' maxlength='100' required id='id_title'></p> <p><label for='id_content'>Content:</label> <textarea name='content' cols='40' rows='10' required id='id_content'></textarea></p> <p><label for='id_status'>Status:</label> <input type='text' name='status' maxlength='20' required id='id_status'></p>"

Пример

Теперь создадим форму для редактирования существующей статьи с использованием параметра instance:

from myapp.models import Article from myapp.forms import ArticleForm # Получаем статью для редактирования article = Article.objects.get(id=1) # Создаем форму с экземпляром модели form = ArticleForm(instance=article) print(form.as_p())

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

"<p><label for='id_title'>Title:</label> <input type='text' name='title' value='My Article' maxlength='100' required id='id_title'></p> <p><label for='id_content'>Content:</label> <textarea name='content' cols='40' rows='10' required id='id_content'>Article content here</textarea></p> <p><label for='id_status'>Status:</label> <input type='text' name='status' value='published' maxlength='20' required id='id_status'></p>"

Пример

Обработка данных, отправленных через форму, с использованием метода save:

from myapp.forms import ArticleForm # POST данные из запроса post_data = { 'title': 'New Article', 'content': 'This is the content', 'status': 'draft' } # Создаем связанную форму с данными form = ArticleForm(post_data) if form.is_valid(): # Сохраняем новую статью в базу данных article = form.save() print(f"Article saved with id: {article.id}") print(f"Title: {article.title}") else: print("Form is invalid") print(form.errors)

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

"Article saved with id: 2" "Title: New Article"

Пример

Обновление существующей записи с использованием параметра instance:

from myapp.models import Article from myapp.forms import ArticleForm # Получаем статью для обновления article = Article.objects.get(id=1) # Данные для обновления post_data = { 'title': 'Updated Article', 'content': 'Updated content', 'status': 'published' } # Создаем форму с экземпляром и данными form = ArticleForm(post_data, instance=article) if form.is_valid(): # Сохраняем изменения updated_article = form.save() print(f"Article updated: {updated_article.title}") else: print("Form is invalid") print(form.errors)

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

"Article updated: Updated Article"

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

  • класс Form,
    базовый класс для создания форм в Django
  • метод save,
    сохраняет данные формы в базу данных
  • атрибут instance,
    экземпляр модели, связанный с формой
  • метод is_valid,
    проверяет валидность данных формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить