From 387ab3e17a4041e7da2e3e017893603067d74aa0 Mon Sep 17 00:00:00 2001 From: Bohdan Mykyta Date: Mon, 9 Mar 2026 08:54:15 +0200 Subject: [PATCH 1/5] Serialization Car --- car/serializers.py | 30 +++++++++++++++++++++++++++++- main.py | 17 ++++++++++++++--- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/car/serializers.py b/car/serializers.py index 3026b2b3..bef1e83c 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -1,5 +1,33 @@ from rest_framework import serializers +from car.models import Car class CarSerializer(serializers.Serializer): - pass + id = serializers.IntegerField(read_only=True) + manufacturer = serializers.CharField(max_length=64) + model = serializers.CharField(max_length=64) + horse_powers = serializers.IntegerField(min_value=1, max_value=1914) + is_broken = serializers.BooleanField() + problem_description = serializers.CharField(allow_null=True) + + def create(self, validated_data): + return Car.objects.create(**validated_data) + + def update(self, instance, validated_data): + instance.manufacturer = validated_data.get( + "manufacturer", instance.manufacturer + ) + instance.model = validated_data.get( + "model", instance.model + ) + instance.horse_powers = validated_data.get( + "horse_powers", instance.horse_powers + ) + instance.is_broken = validated_data.get( + "is_broken", instance.is_broken + ) + instance.problem_description = validated_data.get( + "problem_description", instance.problem_description + ) + instance.save() + return instance diff --git a/main.py b/main.py index c8ff592b..0f8d4794 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,20 @@ +import io + from car.models import Car +from rest_framework.renderers import JSONRenderer +from rest_framework.parsers import JSONParser +from car.serializers import CarSerializer -def serialize_car_object(car: Car) -> bytes: - pass +def serialize_car_object(car: Car) -> bytes: + serializer = CarSerializer(car) + json = JSONRenderer().render(serializer.data) + return json def deserialize_car_object(json: bytes) -> Car: - pass + stream = io.BytesIO(json) + data = JSONParser().parse(stream) + serializer = CarSerializer(data=data) + serializer.is_valid(raise_exception=True) + return Car(**serializer.validated_data) From 334107c8014f5b6988dcff3d0597834258c49be0 Mon Sep 17 00:00:00 2001 From: Bohdan Mykyta Date: Mon, 9 Mar 2026 08:57:22 +0200 Subject: [PATCH 2/5] Fix blank line 2 --- main.py | 1 - 1 file changed, 1 deletion(-) diff --git a/main.py b/main.py index 0f8d4794..d74a1e8a 100644 --- a/main.py +++ b/main.py @@ -2,7 +2,6 @@ from car.models import Car from rest_framework.renderers import JSONRenderer - from rest_framework.parsers import JSONParser from car.serializers import CarSerializer From 32749a6470dee01c3326d4223fc6bba7f2a7c3b9 Mon Sep 17 00:00:00 2001 From: Bohdan Mykyta Date: Mon, 9 Mar 2026 09:00:54 +0200 Subject: [PATCH 3/5] Fix --- main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/main.py b/main.py index d74a1e8a..72b844f1 100644 --- a/main.py +++ b/main.py @@ -11,6 +11,7 @@ def serialize_car_object(car: Car) -> bytes: json = JSONRenderer().render(serializer.data) return json + def deserialize_car_object(json: bytes) -> Car: stream = io.BytesIO(json) data = JSONParser().parse(stream) From f23f8550a4e574f58db0cd2b10ab702f741a4fde Mon Sep 17 00:00:00 2001 From: Bohdan Mykyta Date: Fri, 13 Mar 2026 14:53:43 +0200 Subject: [PATCH 4/5] Fix test problems --- car/migrations/0001_initial.py | 26 ++++++++++++++++++++++++++ car/serializers.py | 4 ++-- main.py | 4 ++-- 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 car/migrations/0001_initial.py diff --git a/car/migrations/0001_initial.py b/car/migrations/0001_initial.py new file mode 100644 index 00000000..09efb1fa --- /dev/null +++ b/car/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 4.1 on 2026-03-13 12:23 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Car', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('manufacturer', models.CharField(max_length=64)), + ('model', models.CharField(max_length=64)), + ('horse_powers', models.PositiveSmallIntegerField(validators=[django.core.validators.MaxValueValidator(1914), django.core.validators.MinValueValidator(1)])), + ('is_broken', models.BooleanField()), + ('problem_description', models.TextField(blank=True, null=True)), + ], + ), + ] diff --git a/car/serializers.py b/car/serializers.py index bef1e83c..146272fc 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -3,12 +3,12 @@ class CarSerializer(serializers.Serializer): - id = serializers.IntegerField(read_only=True) + id = serializers.IntegerField(required=False) manufacturer = serializers.CharField(max_length=64) model = serializers.CharField(max_length=64) horse_powers = serializers.IntegerField(min_value=1, max_value=1914) is_broken = serializers.BooleanField() - problem_description = serializers.CharField(allow_null=True) + problem_description = serializers.CharField(required=False) def create(self, validated_data): return Car.objects.create(**validated_data) diff --git a/main.py b/main.py index 72b844f1..3afb3a05 100644 --- a/main.py +++ b/main.py @@ -16,5 +16,5 @@ def deserialize_car_object(json: bytes) -> Car: stream = io.BytesIO(json) data = JSONParser().parse(stream) serializer = CarSerializer(data=data) - serializer.is_valid(raise_exception=True) - return Car(**serializer.validated_data) + serializer.is_valid() + return Car(**serializer.validated_data) \ No newline at end of file From 8f1dc9d3aba08aeb506a199ce18ff4348411073f Mon Sep 17 00:00:00 2001 From: Bohdan Mykyta Date: Fri, 13 Mar 2026 14:56:22 +0200 Subject: [PATCH 5/5] Fix --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index 3afb3a05..7fcd11fc 100644 --- a/main.py +++ b/main.py @@ -17,4 +17,4 @@ def deserialize_car_object(json: bytes) -> Car: data = JSONParser().parse(stream) serializer = CarSerializer(data=data) serializer.is_valid() - return Car(**serializer.validated_data) \ No newline at end of file + return Car(**serializer.validated_data)