Django: вставлять или обновлять записи базы данных - PullRequest
0 голосов
/ 28 сентября 2019

Я создал следующую функцию, в которой я либо создаю новую запись в базе данных, либо обновляю ее, если event_pk уже существует.Теперь я посмотрел в update_or_create.Однако в моем случае это не работает, так как другие записи (yhat и т. Д.) Всегда отличаются.У вас есть идея лучше написать, чтобы я не повторял себя, как сейчас?У меня была еще одна идея: возможно, я могу сохранить event=event_obj, yhat=event_forecast.get('yhat') и т. Д. В dict и распаковать его.Но не понял, как это может сработать.

def insert_forecast_data_to_db(self) -> None:
    """Insert or update forecast data in database."""
    forecast_data = self.get_forecast_data()
    for event_pk, event_forecast in forecast_data.items():
        event_obj = Event.objects.get(pk=event)
        forecast_obj = Forecast.objects.filter(event=event_pk)
        if forecast_obj.exists():
            forecast_obj.update(
                event=event_obj,
                yhat=event_forecast.get('yhat'),
                yhat_lower=event_forecast.get('yhat_lower'),
                yhat_upper=event_forecast.get('yhat_upper'),
                img_key=event_forecast.get('img_key'),
            )
        else:
            Forecast.objects.create(
                event=event_obj,
                yhat=event_forecast.get('yhat'),
                yhat_lower=event_forecast.get('yhat_lower'),
                yhat_upper=event_forecast.get('yhat_upper'),
                img_key=event_forecast.get('img_key'),
            )

1 Ответ

0 голосов
/ 28 сентября 2019

Я думаю, я только что понял это.Вот к чему я стремился:

def insert_forecast_data_to_db(self) -> None:
    """Insert or update forecast data in database."""
    forecast_data = self.get_forecast_data()
    for event_pk, event_forecast in forecast_data.items():
        event_obj = Event.objects.get(pk=event_pk)
        data = {
            'event': event_obj,
            'yhat': event_forecast.get('yhat'),
            'yhat_lower': event_forecast.get('yhat_lower'),
            'yhat_upper': event_forecast.get('yhat_upper'),
            'img_key': event_forecast.get('img_key'),
        }

        forecast_obj = Forecast.objects.filter(event=event_pk)
        forecast_obj.update(
            **data
        ) if forecast_obj.exists() else Forecast.objects.create(**data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...