From 86fa5afc5d0fe5ad59a8458aa6296648ed3f6609 Mon Sep 17 00:00:00 2001 From: Olha Yukhnenko Date: Thu, 5 Mar 2026 10:03:30 +0200 Subject: [PATCH 1/2] solved task --- .gitignore | 2 ++ car/migrations/0001_initial.py | 26 ++++++++++++++++++++++++++ car/serializers.py | 22 +++++++++++++++++++++- main.py | 17 ++++++++++++++--- 4 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 car/migrations/0001_initial.py diff --git a/.gitignore b/.gitignore index d4a2e5c5..80589756 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ venv/ .pytest_cache/ **__pycache__/ **db.sqlite3 +.venv/ +.venv diff --git a/car/migrations/0001_initial.py b/car/migrations/0001_initial.py new file mode 100644 index 00000000..5b391f89 --- /dev/null +++ b/car/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 4.1 on 2026-03-04 22:19 + +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 3026b2b3..f5a3accc 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -1,5 +1,25 @@ +from django.core.validators import MinValueValidator, MaxValueValidator 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(validators=[MinValueValidator(1), MaxValueValidator(1914)]) + is_broken = serializers.BooleanField(default=False) + problem_description = serializers.CharField(required=False) + + 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..6e0ab9ee 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,20 @@ +import io from car.models import Car +from car.serializers import CarSerializer +from rest_framework.renderers import JSONRenderer +from rest_framework.parsers import JSONParser -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) + car = serializer.save() + return car From 8305296bdd5ae8acd30825d6b82fff20bcea5ccc Mon Sep 17 00:00:00 2001 From: Olha Yukhnenko Date: Thu, 5 Mar 2026 10:08:43 +0200 Subject: [PATCH 2/2] fix row whis long characters --- car/serializers.py | 29 ++++++++++++++++++++++------- main.py | 2 +- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/car/serializers.py b/car/serializers.py index f5a3accc..8037b75d 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -1,4 +1,7 @@ -from django.core.validators import MinValueValidator, MaxValueValidator +from django.core.validators import ( + MinValueValidator, + MaxValueValidator +) from rest_framework import serializers from car.models import Car @@ -8,7 +11,9 @@ class CarSerializer(serializers.Serializer): id = serializers.IntegerField(read_only=True) manufacturer = serializers.CharField(max_length=64) model = serializers.CharField(max_length=64) - horse_powers = serializers.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(1914)]) + horse_powers = serializers.IntegerField( + validators=[MinValueValidator(1), MaxValueValidator(1914)] + ) is_broken = serializers.BooleanField(default=False) problem_description = serializers.CharField(required=False) @@ -16,10 +21,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 diff --git a/main.py b/main.py index 6e0ab9ee..39501644 100644 --- a/main.py +++ b/main.py @@ -5,12 +5,12 @@ from rest_framework.parsers import JSONParser - def serialize_car_object(car: Car) -> bytes: serializer = CarSerializer(car) json = JSONRenderer().render(serializer.data) return json + def deserialize_car_object(json: bytes) -> Car: stream = io.BytesIO(json) data = JSONParser().parse(stream)