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

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

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, ..."

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

1
задан Ken 26 June 2019 в 20:28
поделиться

2 ответа

Можно присоединиться к повторяемой из форматированных строк даты, как:

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

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

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

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

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

1
ответ дан heemayl 26 June 2019 в 20:28
поделиться

Можно сделать это с 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.

2
ответ дан heemayl 26 June 2019 в 20:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: