Django: поддерживает ли ORM оператор SQL «ALL» и «ANY»?

подскажите как использовать sql операторы ALL и ANY в django?

class Master(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    specialisation = models.CharField('Специализация', max_length=50)
    service = models.ManyToManyField('Service', verbose_name='услуги')
    photo = models.ImageField('Фото мастера', upload_to='master/')
    about = models.TextField('Немного о себе', max_length=300)

Пример кода:

services_id = request.GET.getlist('service_id')

И хочу выполнить такой запрос: 
FreeTime.objects.filter(master__service__id=services_id) как сюда передать список? не через __in?

Ответы (1 шт):

Автор решения: Za Ars

Если БД поддерживает, то и Django тоже. А если нет - то просто допишите свой.

Насколько помню, когда мне надо было использовать похожие функции, я писал свои лукапы, т.к. в Django на тот момент не было этих функций. Бстрый поиск тоже не дал результатов.

Как я понял, вам нужен lookup. Прикрепляю ссылку на оф.доку

Полагаю данный пример подойдет вам лучше всего, основан на abs_lt

from django.db.models import Lookup

class All(Lookup):
    lookup_name = 'all'

    def as_sql(self, compiler, connection):
        lhs, lhs_params = compiler.compile(self.lhs.lhs)
        rhs, rhs_params = self.process_rhs(compiler, connection)
        params = lhs_params + rhs_params + lhs_params + rhs_params
        return '%s ALL (%s)' % (lhs, rhs), params

Field.register_lookup(All)

P.S.: Пример может быть не рабочим, не проверял (шибка может быть в return), но он показывает то, что нужно сделать.

→ Ссылка