Как сделать фильтрацию "не равно" в выборке 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)
→ Ссылка