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()
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰