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 перед вызовом этой функции.

Есть идеи, как я могу обойти эту ошибку?

Вернуться на верх