Как использовать связанный поиск в Django?

Я заметил, что реляционные поля Django регистрируют 7 поисков:

fk.get_lookups()
    'in'        : <class 'django.db.models.fields.related_lookups.RelatedIn'>,
    'exact'     : <class 'django.db.models.fields.related_lookups.RelatedExact'>,
    'lt'        : <class 'django.db.models.fields.related_lookups.RelatedLessThan'>,
    'gt'        : <class 'django.db.models.fields.related_lookups.RelatedGreaterThan'>,
    'gte'       : <class 'django.db.models.fields.related_lookups.RelatedGreaterThanOrEqual'>,
    'lte'       : <class 'django.db.models.fields.related_lookups.RelatedLessThanOrEqual'>,
    'isnull'    : <class 'django.db.models.fields.related_lookups.RelatedIsNull'>}

defined    in https://github.com/django/django/blob/stable/3.2.x/django/db/models/fields/related_lookups.py
registered in https://github.com/django/django/blob/stable/3.2.x/django/db/models/fields/related.py

Я знаю, как использовать __exact (он же =), __in и __isnull с отношениями, но в документации нет упоминания о том, что значит применять lt / lte / gt / gte к отношению. Являются ли они сравнениями множеств?

  • __lt: меньше чем (получить записи, которые меньше определенного значения) эквивалентно <
  • .
  • __gt: больше чем (получить записи, которые больше определенного значения) эквивалентно >
  • .
  • __lte: меньше или равно (получить записи, которые меньше или равны определенному значению) эквивалентно =<
  • __gte: больше или равно (получить записи, которые больше или равны определенному значению) эквивалентно =>
  • .

Пример:

.filter(score__lt=100) : объекты с баллом менее 100.

SQL эквивалент: WHERE score < 3;

.filter(id__lte=3) : объекты с id меньше или равным 3.

SQL эквивалент: WHERE id <= 3;

  • Вы также можете комбинировать эти поиски с функцией F:

.filter(rating__lt=F('number_of_comments')

Вы можете посмотреть больше примеров в Django Docs.

Вернуться на верх