Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Query (get) upper bound of RangeField in django

I want to get the upper bound of a RangeField via django queryset.

When you have access to the python object, my_model.size_range.upper works. Not inside the query engine, not working with F, When, Case...

class MyModel(models.Model):
    size_range = IntergerRangeField()

MyModel.objects.all().annotate(new_upper=F('size_range__upper') + 1)
FieldError: Unsupported lookup 'upper' for IntegerRangeField or join on the field not permitted.

Any idea ?

like image 217
Skander Med Avatar asked Sep 12 '25 12:09

Skander Med


1 Answers

I found a semi-solution :

from django.db.models.functions import Upper

MyModel.objects.all().annotate(
      upper=Upper('size_range')
  ).annotate(
      new_upper=F('upper') + 1
  )

Which feels clumsy but at least it werks

If anyone knows better ? I am sure it is possible to query directly the raw value.

like image 154
Skander Med Avatar answered Sep 15 '25 01:09

Skander Med