Django дата разбора на дд-мм-гггг в QuerySet - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть следующий QuerySet для извлечения всех дат с количеством записей из базы данных SQL Server.

    def get_amount_per_day(self):
        return self.extra(select={'time': 'CONVERT(DATE, starttime)'}).values(
            'time').annotate(amount=Count('starttime')).order_by('time')

Вывод:

{
        "time": "2019-03-07T00:00:00",
        "amount": 216
    },
    {
        "time": "2019-03-07T01:00:00",
        "amount": 178
    }
}

Но я хочу разобрать дату на 07-03-2019, кто-нибудь знает, как мне этого добиться?

I попытался преобразовать дату в varchar, но тогда order_by не работает правильно. Он должен быть типа DATE.

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете использовать Cast. Например:

from django.db.models.functions import Cast
from django.db.models import DateField

YourModel.objects.annotate(start_date=Cast('starttime', DateField()))

Обновление

Вы можете попробовать это, используя database functions:

from django.db.models.functions import ExtractDay, ExtractMonth, ExtractYear

YourModel.objects.annotate(
    year=ExtractYear('starttime'),
    month=ExtractMonth('starttime'),
    day=ExtractDay('starttime')
).annotate(start_date=F('date')+'-'+F('month')+'-'+F('year')).values('start_date')

Непроверенный код

Исходя из этого ответа , вы можете попробовать вот так:

YourModel.objects.annotate(start_date=ExpressionWrapper(
        Func(F('starttime'), Value('%d-%m-%Y'), function='DATE_FORMAT'), output_field=CharField()
    ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...