Разница и использование get и filter в Django ORM

get и  filter являются широко используемыми методами запросов в Django ORM, и их возвращаемые значения являются наборами запросов, но есть некоторые различия.

get метод:

  • Используется для запроса одного объекта, если набор результатов запроса пуст или возвращает несколько результатов, он вызовет срабатывание  DoesNotExist или  MultipleObjectsReturned исключение.
  • Если набор результатов запроса пуст, вы можете использовать  get второй параметр метода, чтобы установить значение по умолчанию, например 
    Model.objects.get(pk=1, default=None)
  • Поддерживает связывание вызовов с другими запросами, такими как 
    Model.objects.get(name='John').movies.all()

filter метод:

  • Используется для возврата набора запросов. Набор запросов может содержать 0 или более объектов.
  • Поддерживает использование нескольких условий фильтрации, а несколько условий используют  AND соединения по умолчанию, например 
    Model.objects.filter(name='John', age=18)
  • Поддерживает связывание вызовов с другими запросами, такими как 
    Model.objects.filter(name='John').order_by('-age')。

Вот примеры использования  get и  filter методов:

from myapp.models import Person

# 获取单个对象
person = Person.objects.get(name='John')
print(person)

# 使用 get 方法获取不存在的对象时,捕获 DoesNotExist 异常
try:
    person = Person.objects.get(name='Tom')
except Person.DoesNotExist:
    print('Person not found')

# 使用 `get` 方法第二个参数设置默认值
person = Person.objects.get(name='Tom', default=None)
if person is None:
    print('Person not found')

# 获取查询集,使用 filter 方法
people = Person.objects.filter(age=18)
for person in people:
  print(person)

# 使用多个筛选条件
people = Person.objects.filter(name='John', age=18)
for person in people:
  print(person)

В приведенном выше примере мы myapp.models сначала  импортировали Person из него модель и использовали  get метод для получения  объекта John с именем  Person . Затем мы поймали  исключение get , возникающее при использовании метода для получения несуществующего объекта  DoesNotExist , и показали, как использовать  get второй параметр метода для установки значения по умолчанию.

Затем мы использовали  filter этот метод, чтобы отфильтровать всех лиц, которым исполнилось 18 лет, и  for зациклились на наборе запросов.

Наконец, мы использовали  filter несколько фильтров метода, чтобы получить  John людей с именами и возрастом 18 лет.

Guess you like

Origin blog.csdn.net/qq_37140721/article/details/130406666