Сериализатор Django не проверяет и не сохраняет данные

Я пытаюсь сохранить данные в базе данных, это работает для большинства моих моделей, но для нескольких моделей я не уверен, почему, но django не сериализует данные. Надеюсь, кто-нибудь сможет указать, где я могу ошибаться. Вот мой код

Django Models

class UserModel(AbstractUser):
    uuid = models.UUIDField(default=uuid.uuid4, editable=False)

class UserWorkPresenceModel(models.Model):
    user = models.ForeignKey("UserModel", on_delete=models.CASCADE, related_name="workpresence")
    is_active = models.BooleanField(default=False)
    check_in = models.DateTimeField(blank=False)
    check_out = models.DateTimeField(blank=True, null=True)
    work_break = []

class UserWorkBreakModel(models.Model):
    work_presence = models.ForeignKey("UserWorkPresenceModel", on_delete=models.CASCADE, related_name="work_break")
    start_break = models.DateTimeField(blank=True)
    end_break = models.DateTimeField(blank=True, null=True)
    is_current_break = models.BooleanField(default=False)

Сериализатор:

class UserTakeBreakSerializer(serializers.Serializer):
    class Meta:
        model = UserWorkBreakModel
        # fields = ("start_break", "end_break")
        fields = '__all__'

API View

class UserStartWorkBreakView(APIView):
    def post(self, request, id):
        try:
            user = UserModel.objects.get(uuid=id)
        except:
            return Response({'message': 'User not found'}, status=HTTP_400_BAD_REQUEST)
        try:
            work_presence = UserWorkPresenceModel.objects.get(user=user, is_active=True)
        except UserWorkPresenceModel.DoesNotExist:
            return Response({'message': 'User work presence not found'}, status=HTTP_400_BAD_REQUEST)
        currently_onbreak = UserWorkBreakModel.objects.filter(work_presence=work_presence, is_current_break=True)
        if currently_onbreak.exists():
            return Response({'message': 'User already working'}, status=HTTP_400_BAD_REQUEST)
        serializer = UserTakeBreakSerializer(data=request.data)
        print(serializer)
        if serializer.is_valid():
            print(f'validated_data: {serializer.validated_data}')
            user.workpresence_status = UserWorkPresenceStatus.ON_BREAK
            serializer.validated_data['is_current_break'] = True
            serializer.save(work_presence=work_presence)
            user.save()
            print(f'serializer.data: {serializer.data}')
            return Response(serializer.data, status=HTTP_201_CREATED)
        return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)

Я не получаю никакой ошибки, просто пустой словарь, вот результат моих команд печати:

UserTakeBreakSerializer(data={'start_break': '2024-05-10 15:05:52.829867'}):
validated_data: {}
serializer.data: {}

Возможно, вам покажется смешным, но я реализовал ту же логику для UserWorkPresenceModel и она работает нормально, я могу делать как создание, так и обновление для UserWorkPresenceModel. И дело не только в этом, у меня такая же проблема с другой моделью, одна работает, а в другой похожей модели та же логика не работает.

Спасибо за помощь

Используйте ModelSerializer [drf-doc]. Для простого сериализатора вам придется самостоятельно написать шаблонный код:

class UserTakeBreakSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserWorkBreakModel
        fields = '__all__'

По сути, произошло то, что вы определили пустой сериализатор: сериализатор с без полей и без логики сохранения. Сериализатор ModelSerializer, напротив, смотрит на Meta и затем создает поля и соответствующую логику для этой модели.

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