Django-запрос к строке - PullRequest
       1

Django-запрос к строке

1 голос
/ 26 июня 2019

У меня есть набор запросов:

chart_data = DetailChange.objects.extra(select={'day': 'date(captured_date)'})\
    .values('item_id__store_id__store_name', 'day')\
    .annotate(total_sale=Sum('amount_sold'))

тогда у меня есть такой набор запросов:

{'day': datetime.date(2019, 6, 24), 'item_id__store_id__store_name': 'Keyboard Pro', 'total_sale': 706.0}
{'day': datetime.date(2019, 6, 25), 'item_id__store_id__store_name': 'Keyboard Pro', 'total_sale': 18.0}
...

Теперь я хочу получить одну единственную строку, которая объединяет все дни в ней, разделенные знаком ",". Как:

"2019-6-24, 2019-6-25, 2019-6-26, ..."

Есть ли простой способ сделать это?

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Вы можете сделать это с помощью genexp и str.join с , в качестве разделителя:

', '.join(str(item['day']) for item in chart_data)

str(datetime.date), т.е. datetime.date.__str__ уже возвращает дату в формате %Y-%m-%d, поэтому вам не нужно делать никаких дополнительных strftime работ.

OTOH, если вам нужно только поле day, вы не должны включать item_id__store_id__store_name в values.

1 голос
/ 26 июня 2019

Вы можете присоединиться к повторяющейся строке даты, например:

<b>', '.join(</b>item['day']<b>.strftime('%Y-%-m-%-d') for item in chart_data)</b>

Итак, здесь мы, таким образом, отформатируем каждый day объект, например:

>>> dd.strftime('%Y-%-m-%-d')
'2019-6-24'

и затем мы соединяем их вместе, разделяя их запятой и пробелом (', ').

При этом, если вас интересует только форматирование даты, нет особого смысла сначала добавлять дополнительные аннотации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...