Как сделать фильтрацию "не равно" в выборке Django?
Есть модель:
class Object(models.Model):
begin = models.IntegerField('Year begin', null=True, blank=True)
end = models.IntegerField('Year end', null=True, blank=True)
Надо сделать выборку из базы по условию: begin != end + 2
Пытаюсь делать так:
objects = Object.objects.filter(begin__gte=0).filter(end__gte=0).filter(~Q(begin=F('end')+2))
Но в выборку попадают объекты у которых begin == end + 2.
Например begin = 2020 и end = 2022.
Что делаю не так? Как решить проблему?
PS. Пробовал так же:
objects = Object.objects.filter(begin__gte=0, end__gte=0).exclude(Q(begin=F('end')+2))
и
objects = Object.objects.filter(Q(begin__gte=0) & Q(end__gte=0) & ~Q(begin=F('end')+2))
Результат тот же.
Ответы (1 шт):
Автор решения: Duncan
→ Ссылка
Сработало такое решение:
objects = Object.objects.annotate(delta=F('end') - F('begin')).exclude(delta=2)