Выполняет ли Cast Function округление перед литьем Django?

Я ожидаю, что функция Cast в Django будет выполнять только приведение, например, 7.6 будет 7 без выполнения округления.

Например, в Mysql следующее:

select CAST(((<value> - 1) div 30) AS SIGNED INTEGER)

При value, равном 227, получится 7.

Но с помощью Django Cast можно сделать следующее:

MyModel.objects.annotate(time_window = Cast((F('field') - 1) / 30, IntegerField()))

произведет 8 для некоторой записи, имеющей значение 227 для field.

Мои ожидания неверны, или существует какой-то флаг, предотвращающий такое поведение округления?

Как заметил @Salman_A, запрос sql выполняет целочисленное деление, а запрос django использует CAST, который будет выполнять округление.

Проблема в том, что вы не можете просто заменить / на // в запросе django, потому что это вызовет ошибку TypeError.

Решением было выполнение операции devision с последующей операцией floor, что-то вроде:

Floor(F('Field') / <some constant>, output_field=IntegerField()), 
Вернуться на верх