Метод latest() (и его асинхронная версия alatest()) возвращает объект, где были самые последние изменения в определенных полях.
Метод earliest() (и его асинхронная версия aearliest()) возвращает объект, где были самые ранние изменения в определенных полях.
В качестве параметра оба метода принимают набор полей, на основании которых возвращается объект:
from .models import Person # получаем объект с самыми последними изменениями в поле id latest_person = Person.objects.latest("id") print(f"{latest_person.name} - {latest_person.age}") # получаем объект c самыми ранними изменениями в поле name earliest_person = Person.objects.earliest("id") print(f"{earliest_person.name} - {earliest_person.age}")
Можно передать набор полей:
# получаем объект с самыми последними изменениями в поле age # и с самыми ранними изменениями в поле name latest_person = Person.objects.latest("age", "-name") print(f"{latest_person.name} - {latest_person.age}")
Если передается поле c минусом, то поиск идет в обратном порядке: для метода latest идет поиск поля с самыми ранними изменениями, а для метода earliest - с самыми поздними изменениями.
Если ни одного объекта не найдено (например, в случае с пустым набором), оба метода генерируют исключение DoesNotExist
Метод first() (и его асинхронная версия afirst()) возвращает первый объект из набора.
Метод last() (и его асинхронная версия alast()) возвращает последний объект из набора.
from .models import Person # получим первый объект first_person = Person.objects.first() print(f"{first_person.name} - {first_person.age}") # получим последний объект last_person = Person.objects.last() print(f"{last_person.name} - {last_person.age}") # получим первый объект из набора, отсортированного по возрасту first_person = Person.objects.order_by("age").first() print(f"{first_person.name} - {first_person.age}")
Если ни одного объекта не найдено (например, в случае с пустым набором), оба метода возвращают значение None
Метод exists() (и его асинхронная версия aexists()) возвращает True, если набор QuerySet содержит данные, и False - если не содержит:
from .models import Person is_present = Person.objects.filter(name = "Tom").exists() if is_present: print("в наборе есть объекты") else: print("объекты в наборе отсутствуют")
Метод contains() (и его асинхронная версия acontains()) возвращает True, если набор QuerySet содержит определенный объект, и False - если не содержит:
from .models import Person # получим последний объект last_person = Person.objects.last() # есть ли объект last_person среди тех, у которых age меньше 35 is_present = Person.objects.filter(age__lt=35).contains(last_person) if is_present: print("объект есть в наборе") else: print("объект отсутствует")