From 7ea91851c9d32d45dedcd6bcfee945060076111d Mon Sep 17 00:00:00 2001 From: VolodymyrHavrylenko Date: Wed, 4 Mar 2026 10:46:17 +0200 Subject: [PATCH 1/4] Solution --- car/serializers.py | 20 +++++++++++++++++++- main.py | 20 +++++++++++++++++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/car/serializers.py b/car/serializers.py index 3026b2b3..bcf26339 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -1,5 +1,23 @@ from rest_framework import serializers +from car.models import Car + class CarSerializer(serializers.Serializer): - pass + manufacturer = serializers.CharField(max_length=64) + model = serializers.CharField(max_length=64) + horse_power = serializers.IntegerField(min_value=0, max_value=100) + 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_power = validated_data.get('horse_power', instance.horse_power) + 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..c316e66a 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,23 @@ from car.models import Car +from rest_framework.renderers import JSONRenderer + +from car.serializers import CarSerializer +import io +from rest_framework.parsers import JSONParser + def serialize_car_object(car: Car) -> bytes: - pass + serializer = CarSerializer(instance=car) + json_data = JSONRenderer().render(serializer.data) + return json_data -def deserialize_car_object(json: bytes) -> Car: - pass +def deserialize_car_object(json: bytes): + stream = io.BytesIO(json) + data = JSONParser().parse(stream) + serializer = CarSerializer(data=data) + if serializer.is_valid(raise_exception=True): + car = serializer.save() + return car + return None From 44bd09407b055fc1e787d3390ebbfad152a25a43 Mon Sep 17 00:00:00 2001 From: VolodymyrHavrylenko Date: Wed, 4 Mar 2026 10:55:57 +0200 Subject: [PATCH 2/4] Fix flake8 --- .gitignore | 2 +- car/serializers.py | 24 ++++++++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index d4a2e5c5..5447f72e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ *.iml .env .DS_Store -venv/ +vevn/ .pytest_cache/ **__pycache__/ **db.sqlite3 diff --git a/car/serializers.py b/car/serializers.py index bcf26339..c1b018de 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -6,7 +6,9 @@ class CarSerializer(serializers.Serializer): manufacturer = serializers.CharField(max_length=64) model = serializers.CharField(max_length=64) - horse_power = serializers.IntegerField(min_value=0, max_value=100) + horse_power = serializers.IntegerField( + min_value=0, max_value=100 + ) is_broken = serializers.BooleanField() problem_description = serializers.CharField(allow_null=True) @@ -14,10 +16,20 @@ 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_power = validated_data.get('horse_power', instance.horse_power) - instance.is_broken = validated_data.get('is_broken', instance.is_broken) - instance.problem_description = validated_data.get('problem_description', instance.problem_description) + instance.manufacturer = validated_data.get( + "manufacturer", instance.manufacturer + ) + instance.model = validated_data.get( + "model", instance.model + ) + instance.horse_power = validated_data.get( + "horse_power", instance.horse_power + ) + 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 From 5bf7b389d79927e33bc610e44923372c9ef6b026 Mon Sep 17 00:00:00 2001 From: VolodymyrHavrylenko Date: Wed, 4 Mar 2026 11:12:11 +0200 Subject: [PATCH 3/4] fixed all issue --- car/serializers.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/car/serializers.py b/car/serializers.py index c1b018de..3393d874 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -4,13 +4,18 @@ class CarSerializer(serializers.Serializer): + id = serializers.IntegerField(read_only=True) manufacturer = serializers.CharField(max_length=64) model = serializers.CharField(max_length=64) - horse_power = serializers.IntegerField( - min_value=0, max_value=100 + 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, + allow_blank=True, + allow_null=True + ) def create(self, validated_data): return Car.objects.create(**validated_data) @@ -22,8 +27,8 @@ def update(self, instance, validated_data): instance.model = validated_data.get( "model", instance.model ) - instance.horse_power = validated_data.get( - "horse_power", instance.horse_power + instance.horse_powers = validated_data.get( + "horse_powers", instance.horse_powers ) instance.is_broken = validated_data.get( "is_broken", instance.is_broken From 7f953e4ec7b5cf43445e5aaaf6e3c36b14bd1f18 Mon Sep 17 00:00:00 2001 From: VolodymyrHavrylenko Date: Wed, 4 Mar 2026 11:15:12 +0200 Subject: [PATCH 4/4] Added migration to pull --- car/migrations/0001_initial.py | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) 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..7434d495 --- /dev/null +++ b/car/migrations/0001_initial.py @@ -0,0 +1,41 @@ +# Generated by Django 4.1 on 2026-03-04 08:59 + +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)), + ], + ), + ]