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), но он показывает то, что нужно сделать.