Как мы можем получить несколько значений из одного запроса django orm? - PullRequest
0 голосов
/ 01 июня 2018
class Test(ModelBase):
     team = models.IntegerField(null=True)



id    created_at                           team
 1     2018-02-14 10:33:46.307214+05:30    1
 2     2018-02-24 10:41:40.307681+05:30    1
 3     2018-03-14 12:00:02.748088+05:30    1
 4     2018-03-12 18:05:33.598297+05:30    3
 5     2018-03-12 18:04:00.694774+05:30    3
 6     2018-04-14 11:24:48.554993+05:30    3
 7     2018-04-14 11:42:27.442441+05:30    3
 8     2018-05-11 15:53:21.528813+05:30    3
 9     2018-05-08 15:49:58.684201+05:30    3

Как мы можем получить из одного запроса текущий месяц & счет = 3, последний месяц & счет = 3?

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Вы можете использовать Q объект , который позволяет выполнять запрос с условиями ИЛИ:

current_month = datetime.datetime.now().month
first_day_of_current_month = datetime.datetime.now().replace(day=1)
last_month = (first_day_of_current_month - datetime.timedelta(days=1)).month

Test.objects.filter(Q(created_at__month=current_month, team=3)|Q(created_at__month=last_month, team=3))
0 голосов
/ 01 июня 2018

Вы можете просто фильтровать с помощью цепочки запросов.Просто получите ваши current_month и last_month (это должно быть целое число) и

Test.objects.filter(created_at__month__in=[current_month, last_month], team=3)
0 голосов
/ 01 июня 2018

Вы можете использовать TruncMonth, чтобы получать данные, отфильтрованные по каждому месяцу.Затем вы можете задать первое и последнее значение индекса gen.

from django.db.models.functions import TruncMonth
from django.db.models import Sum

queryset = Test.objects.all().annotate(
             month=TruncMonth('created_at')).values('month').annotate(
             number=Sum('team'))
...