Ответ
В Django CRUD-операции (Create, Read, Update, Delete) выполняются с помощью менеджера моделей (Model.objects) и его методов, которые работают с объектами QuerySet.
Это основной способ взаимодействия с базой данных, абстрагирующий от написания сырых SQL-запросов.
Основные методы:
-
Create (Создание)
Model.objects.create(field='value', ...): Создает и сохраняет объект в БД за один шаг. Наиболее удобный способ.obj = Model(field='value'); obj.save(): Создает экземпляр в памяти, что позволяет выполнить дополнительные действия с объектом перед его сохранением.
-
Read (Чтение)
Model.objects.all(): ВозвращаетQuerySetсо всеми объектами модели.Model.objects.get(pk=1): Получает один объект. Вызывает исключениеDoesNotExistилиMultipleObjectsReturned, если объект не найден или найдено несколько.Model.objects.filter(status='published'): ВозвращаетQuerySetс объектами, соответствующими условию.
-
Update (Обновление)
obj.field = 'new_value'; obj.save(): Изменяет атрибуты полученного экземпляра и сохраняет их в БД. Вызывает методыsave()модели.QuerySet.update(field='new_value'): Массовое обновление объектов на уровне БД. Более эффективно, но не вызывает методsave()для каждого объекта.
-
Delete (Удаление)
obj.delete(): Удаляет один конкретный объект.QuerySet.delete(): Массовое удаление объектов, соответствующих фильтру.
Пример полного цикла:
from myapp.models import Post
# 1. Create
new_post = Post.objects.create(title="Первый пост", content="Привет, мир!")
# 2. Read
post = Post.objects.get(id=new_post.id)
print(post.title) # Вывод: "Первый пост"
# 3. Update
post.title = "Обновленный заголовок"
post.save()
# Массовое обновление для всех черновиков
Post.objects.filter(is_published=False).update(is_published=True)
# 4. Delete
post.delete()