Агрегируйте события с помощью drf - PullRequest
0 голосов
/ 13 марта 2020

У меня следующая структура:

[
    {
        "event_datetime": "2020-03-12T22:39:55.273267Z",
        "event_type": "Production",
        "quantity": 58
    },
    {
        "event_datetime": "2020-03-12T22:49:55.273267Z",
        "event_type": "Production",
        "quantity": 108
    },
    {
        "event_datetime": "2020-03-12T23:39:55.273267Z",
        "event_type": "Waste",
        "quantity": 8
    },
    {
        "event_datetime": "2020-03-12T23:59:55.273267Z",
        "event_type": "Production",
        "quantity": 15
    }

]

Что я хочу сделать, так это то, что после того, как у меня есть событие, за которым следует другое, того же типа, я хотел бы вывести на другой конечной точке следующую структуру:

[
    {

        "start_datetime": "2020-03-12T22:39:55.273267Z",
        "end_datetime": "2020-03-12T22:49:55.273267Z",
        "event_type": "Production",
        "quantity": 108
    },
    {
        "start_datetime": "2020-03-12T23:39:55.273267Z",
        "end_datetime": "2020-03-12T23:39:55.273267Z"
        "event_type": "Waste",
        "quantity": 8
    },
    {
        "start_datetime": "2020-03-12T23:59:55.273267Z",
        "end_datetime": "2020-03-12T23:59:55.273267Z"
        "event_type": "Production",
        "quantity": 15
    }

]

Я также хочу сделать это без необходимости сохранять эту структуру на БД. Как я могу сделать это с помощью DRF?

1 Ответ

0 голосов
/ 13 марта 2020

Приведенный ниже код должен соответствовать вашим потребностям.

import json
events = [
    {
        "event_datetime": "2020-03-12T22:39:55.273267Z",
        "event_type": "Production",
        "quantity": 58
    },
    {
        "event_datetime": "2020-03-12T22:49:55.273267Z",
        "event_type": "Production",
        "quantity": 108
    },
    {
        "event_datetime": "2020-03-12T22:52:55.273267Z",
        "event_type": "Production",
        "quantity": 100
    },
    {
        "event_datetime": "2020-03-12T23:39:55.273267Z",
        "event_type": "Waste",
        "quantity": 8
    },
    {
        "event_datetime": "2020-03-12T23:59:55.273267Z",
        "event_type": "Production",
        "quantity": 15
    }

]
temp_event = events.pop(0)
prev_event_type = temp_event['event_type']
prev_datetime = temp_event.pop('event_datetime')
temp_event['start_datetime'] = prev_datetime
amended_events = [temp_event]

for event in events:
  temp_event = event
  end_datetime = event.pop('event_datetime')
  event['start_datetime'] = end_datetime
  event['end_datetime'] = end_datetime
  if prev_event_type == event['event_type']:
    prev_event = amended_events.pop()
    prev_starttime = prev_event['start_datetime']
    event['start_datetime'] = prev_starttime
  prev_event_type = temp_event['event_type']
  prev_datetime = end_datetime
  amended_events.append(event)

print(json.dumps(amended_events, indent=4))

Для DRF создайте новую функцию, передайте события в качестве параметра и верните amend_events.

Дайте мне знать, если это это то, что вы хотели.

...