Используйте FLOOR () (или другие функции SQL) в запросах Django - PullRequest
3 голосов
/ 13 января 2011

В Django 1.2.3 мне нужно выполнить такой запрос:

SELECT FLOOR(quantity/100) FROM mytable

есть ли способ сделать его в стиле чистого Джанго?

Затем более сложный шаг:

SELECT FLOOR(quantity/100), count(*) 
FROM mytable
GROUP BY FLOOR(quantity/100)

есть ли стандартное решение?

Ответы [ 3 ]

3 голосов
/ 17 января 2011

В итоге я использовал предложение extra:

MyModel.objects.extra(group='FLOOR(quantity/100)')\
    .values('group')\
    .annotate(count=Sum('quantity'))\
    .order_by()

аргумент Sum довольно загадочный, но он работает ...

2 голосов
/ 13 января 2011

Для этого вам нужно будет использовать SQL.ORM в Django очень полезен, но вы выходите за рамки тех случаев, которые он охватывает.Я бы даже не сказал, что здесь поможет метод raw() queryset - я бы использовал функциональность для непосредственного выполнения собственного SQL * .

1 голос
/ 02 апреля 2019

Начиная с Django 2.2, вы можете использовать функцию Floor :

class Floor(Transform):
    function = 'FLOOR'
    lookup_name = 'floor'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...