From c5aff748c8e5455f1c621015ae9a4955d49232d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Drz=C4=85dzewski?= Date: Tue, 10 Mar 2026 16:51:16 +0100 Subject: [PATCH] solution --- car/migrations/0001_initial.py | 26 ++++++++++++++++++++ car/serializers.py | 43 +++++++++++++++++++++++++++++++++- main.py | 13 ++++++++-- 3 files changed, 79 insertions(+), 3 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..5986403d --- /dev/null +++ b/car/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 4.1 on 2026-03-10 14:15 + +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..1a62cfd6 100644 --- a/car/serializers.py +++ b/car/serializers.py @@ -1,5 +1,46 @@ 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() + is_broken = serializers.BooleanField() + problem_description = serializers.CharField( + allow_null=True, + required=False + ) + + def validate_horse_powers(self, value): + if value > 1914 or value < 1: + raise serializers.ValidationError( + "Horse Power must be between 1 and 1914!" + ) + return value + + 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..5d14bbfb 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,18 @@ from car.models import Car +from car.serializers import CarSerializer + +import json as js def serialize_car_object(car: Car) -> bytes: - pass + serializer = CarSerializer(instance=car) + return js.dumps(serializer.data, separators=( + ",", ":")).encode("utf-8",) def deserialize_car_object(json: bytes) -> Car: - pass + json_str = json.decode("utf-8") + data = js.loads(json_str) + serializer = CarSerializer(data=data) + serializer.is_valid(raise_exception=True) + return Car.objects.create(**serializer.validated_data)