Create (Создание):
save():obj = MyModel(field1='value1', field2='value2') obj.save() # Сохраняет новый объект в БДcreate(): Создает и сохраняет объект одним шагом.obj = MyModel.objects.create(field1='value1', field2='value2')bulk_create(): Эффективное создание множества объектов за один запрос (не вызываетsave()для каждого объекта, не работает с ManyToMany до сохранения).MyModel.objects.bulk_create([ MyModel(field1='value1', field2='value2'), MyModel(field1='value3', field2='value4'), ])
Read (Чтение):
-
all(): ВозвращаетQuerySetвсех объектов модели.all_objects = MyModel.objects.all() -
filter(**kwargs): ВозвращаетQuerySetобъектов, соответствующих условиям (AND).filtered_objects = MyModel.objects.filter(field1='value1', status='published') -
exclude(**kwargs): ВозвращаетQuerySetобъектов, не соответствующих условиям.excluded_objects = MyModel.objects.exclude(status='draft') -
get(**kwargs): Возвращает один объект, соответствующий условиям. Вызывает ошибкуMyModel.DoesNotExist, если объект не найден, илиMyModel.MultipleObjectsReturned, если найдено больше одного.try: my_object = MyModel.objects.get(pk=1) # pk - primary key except MyModel.DoesNotExist: print("Объект не найден") -
order_by(*fields): СортируетQuerySet.-перед именем поля означает сортировку по убыванию.MyModel.objects.order_by('name') # По возрастанию имени MyModel.objects.order_by('-date_created') # По убыванию даты MyModel.objects.order_by('category', '-price') # Сначала по категории, потом по цене -
get_object_or_404(klass, *args, **kwargs): Удобная функция (изdjango.shortcuts) для получения объекта или вызоваHttp404, если он не найден. Используется в представлениях.from django.shortcuts import get_object_or_404 def my_view(request, pk): my_object = get_object_or_404(MyModel, pk=pk) # ... дальнейшая обработка ...- Поисковые выражения (Lookups): Используются в
filter(),exclude(),get(). Синтаксис:field__lookup=value.exact: Точное соответствие (чувствительно к регистру).iexact: Точное соответствие (без учета регистра).contains: Содержит подстроку (чувствительно к регистру).icontains: Содержит подстроку (без учета регистра).in: Значение поля находится в переданном списке/кортеже.startswith: Начинается с подстроки (чувствительно к регистру).istartswith: Начинается с подстроки (без учета регистра).endswith: Заканчивается подстрокой (чувствительно к регистру).iendswith: Заканчивается подстрокой (без учета регистра).gt: Больше (>).gte: Больше или равно (>=).lt: Меньше (<).lte: Меньше или равно (<=).isnull: Является ли значениеNULL(TrueилиFalse).range: Значение находится в диапазоне (принимает кортеж(start, end)).- Для дат/времени:
date,time,year,month,day,week_day. regex,iregex: Соответствие регулярному выражению.- Примеры:
MyModel.objects.filter(name__iexact="john") MyModel.objects.filter(description__icontains="python") MyModel.objects.filter(status__in=['published', 'archived']) MyModel.objects.filter(age__gte=18) MyModel.objects.filter(pub_date__year=2023) MyModel.objects.filter(category__isnull=True) MyModel.objects.filter(price__range=(10.0, 50.0))
- Поисковые выражения (Lookups): Используются в
Update (Обновление):
save(): Изменить поля объекта и сохранить.my_object = MyModel.objects.get(pk=1) my_object.field1 = 'new_value' my_object.save() # Обновляет объект в БДupdate(**kwargs): Обновляет поля для всех объектов вQuerySetодним SQL-запросом. Не вызываетsave()для объектов, обходит сигналы.MyModel.objects.filter(status='draft').update(status='published', updated_at=timezone.now())bulk_update(objs, fields): Эффективное обновление множества объектов (objs- список объектов) по указанным полям (fields- список имен полей). Требует, чтобы у объектов былиpk.objects_to_update = list(MyModel.objects.filter(category='old')) for obj in objects_to_update: obj.category = 'new' obj.notes = 'Updated' MyModel.objects.bulk_update(objects_to_update, ['category', 'notes'])update_or_create(defaults=None, **kwargs): Атомарно обновляет объект поkwargsили создает его, если он не найден.defaults- словарь полей, которые обновляются/устанавливаются при создании.obj, created = Person.objects.update_or_create( first_name="John", last_name="Lennon", # Поля для поиска defaults={'age': 40} # Поля для обновления/установки ) if created: print("Создан новый объект John Lennon") else: print("Обновлен возраст John Lennon")
Delete (Удаление):
delete(): Удаляет объект или все объекты вQuerySet.# Удаление одного объекта my_object = MyModel.objects.get(pk=1) my_object.delete() # Удаление нескольких по фильтру MyModel.objects.filter(status='archived').delete() # Удаление всех (осторожно!) # MyModel.objects.all().delete()
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰