F() expressions can be used to execute arithmetic operations (+, -, * etc.) among model fields, in order to define an algebraic lookup/connection between them.
Let model be:
class MyModel(models.Model):
int_1 = models.IntegerField()
int_2 = models.IntegerField()
Now lets assume that we want to retrieve all the objects of MyModel table who's int_1 and int_2 fields satisfy this equation: int_1 + int_2 >= 5. Utilizing annotate() and filter() we get:
result = MyModel.objects.annotate(
diff=F(int_1) + F(int_2)
).filter(diff__gte=5)
result now contains all of the aforementioned objects.
Although the example utilizes Integer fields, this method will work on every field on which an arithmetic operation can be applied.