KeyError: 'created_at' в сериализаторе django rest
Я получаю следующую ошибку, когда пытаюсь сохранить некоторые данные, поступающие из запроса POST в базу данных:
KeyError: 'created_at'
Моя views.py следующая:
@api_view(['GET', 'POST'])
def event(request):
if request.method == 'POST':
serializer = EventSerializer(data=request.data)
if serializer.is_valid():
DR_notice = serializer.data['dr_notice_period']
DR_duration = serializer.data['dr_duration']
DR_trigger = serializer.data['created_at']
DR_start, DR_finish, timesteps = DR_event_timesteps(DR_notice, DR_duration, DR_trigger)
serializer.save(user_id_event=request.user, dr_start=DR_start, dr_finish=DR_finish, timesteps=timesteps)
else:
return Response({"status": "error", "data": serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
Моя models.py следующая:
from django.db import models
from django.contrib.postgres.fields import ArrayField
from django.contrib.auth import get_user_model
CustomUser = get_user_model()
class Event(models.Model):
user_id_event = models.ForeignKey(CustomUser, on_delete=models.CASCADE, null=True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
dr_start = models.DateTimeField(blank=True, null=True)
dr_finish = models.DateTimeField(blank=True, null=True)
timesteps = models.IntegerField(blank=True, null=True)
dr_notice_period = models.IntegerField(blank=True, null=True)
dr_duration = models.IntegerField(blank=True, null=True)
dr_request = models.FloatField(blank=True, null=True)
class Result(models.Model):
event_id_result = models.OneToOneField(Event, on_delete=models.CASCADE, null=True)
HVAC_flex = ArrayField(models.FloatField(blank=True, null=True))
DHW_flex = ArrayField(models.FloatField(blank=True, null=True))
lights_flex = ArrayField(models.FloatField(blank=True, null=True))
Моя serializers.py следующая:
from rest_framework import serializers
from vpp_optimization.models import Event, Result
class EventSerializer(serializers.ModelSerializer):
created_at = serializers.DateTimeField(format="%d-%m-%Y %H:%M:%S", read_only=True)
class Meta:
model = Event
fields = ('__all__')
class ResultSerializer(serializers.ModelSerializer):
HVAC_flex = serializers.ListField(child=serializers.FloatField())
DHW_flex = serializers.ListField(child=serializers.FloatField())
lights_flex = serializers.ListField(child=serializers.FloatField())
class Meta:
model = Result
fields = ('__all__')
Как я понимаю, created_at принимает свое значение во время вызова serializer.save(), но я должен использовать его раньше, чтобы иметь возможность вычислить значения dr_start, dr_finish и timesteps.
EDIT: Хочу отметить, что функция DR_event_timesteps вычисляет значения dr_start, dr_finish и timesteps, которые я хочу сохранить в базе данных. Поэтому важно иметь значение created_at перед вызовом этой функции.
Есть идеи, как я могу обойти эту ошибку?