I was expecting products with weight between 3 and 4, however this gives OR query instead:
Product.objects.filter(eav__weight__gt=3, eav__weight__lt=4)
.. so I received weight with 2 because it was less than 4.
Django's filter convention is to use that as a AND query, I think that should change to that.