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

Метод save

Метод save применяется к экземпляру ModelForm и сохраняет данные формы в базу данных. Он возвращает сохраненный объект модели. Метод автоматически создает или обновляет запись в зависимости от того, передан ли аргумент ModelForm/attribute/instance/">instance при создании формы. Основные параметры метода: commit - определяет, нужно ли сразу сохранять объект в базу данных, и force_insert, force_update - принудительно задают тип операции.

Синтаксис

form.save(commit=True, force_insert=False, force_update=False)

Пример . Модель и форма

Для начала создадим модель статьи и соответствующую форму:

from django.db import models from django.forms import ModelForm class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() created_at = models.DateTimeField(auto_now_add=True) status = models.CharField(max_length=20) class ArticleForm(ModelForm): class Meta: model = Article fields = ['title', 'content', 'status']

Пример . Создание новой записи

Создадим новую статью с использованием формы:

from myapp.forms import ArticleForm data = { 'title': 'Django Tutorial', 'content': 'Django is a high-level Python web framework.', 'status': 'published' } form = ArticleForm(data) if form.is_valid(): article = form.save() print(article.title) print(article.id)

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

"Django Tutorial" 1

Пример . Обновление существующей записи

Обновим существующую статью, передав экземпляр модели в параметр instance:

from myapp.forms import ArticleForm from myapp.models import Article article = Article.objects.get(id=1) data = { 'title': 'Updated Django Tutorial', 'content': 'Django is a high-level Python web framework.', 'status': 'published' } form = ArticleForm(data, instance=article) if form.is_valid(): updated_article = form.save() print(updated_article.title) print(updated_article.id)

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

"Updated Django Tutorial" 1

Пример . Использование параметра commit

Используем параметр commit для отложенного сохранения, например, для дополнительной обработки данных:

from myapp.forms import ArticleForm data = { 'title': 'Django Forms', 'content': 'Working with Django forms.', 'status': 'draft' } form = ArticleForm(data) if form.is_valid(): article = form.save(commit=False) article.status = 'published' article.save() print(article.title) print(article.status)

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

"Django Forms" "published"

Пример . Работа с ManyToManyField

При работе с полями типа ManyToManyField метод save обрабатывает связи после сохранения основной записи:

from django.db import models from django.forms import ModelForm class Category(models.Model): name = models.CharField(max_length=50) class ArticleWithCategories(models.Model): title = models.CharField(max_length=100) categories = models.ManyToManyField(Category) class ArticleWithCategoriesForm(ModelForm): class Meta: model = ArticleWithCategories fields = ['title', 'categories'] # Использование формы data = {'title': 'Advanced Django'} category_ids = [1, 2, 3] form = ArticleWithCategoriesForm(data) if form.is_valid(): article = form.save(commit=False) article.save() form.save_m2m() print(article.title) print(article.categories.all())

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

"Advanced Django" [<Category: Python>, <Category: Web>, <Category: Django>]

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

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