Я создал следующую функцию, в которой я либо создаю новую запись в базе данных, либо обновляю ее, если 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'),
)