diff --git a/jobposting/serializers.py b/jobposting/serializers.py index 2627200..335cf7b 100644 --- a/jobposting/serializers.py +++ b/jobposting/serializers.py @@ -2,6 +2,22 @@ from rest_framework import serializers from jobposting.models import JobListing, SkillLevels, CompanyLogo, Skill from core.models import MyUser, AnonymousUserData +class SkillLevelsField(serializers.Field): + def to_representation(self, value): + # Konwersja do formatu wyjściowego + return {skill_level.skill_id.skill_name: skill_level.skill_level for skill_level in value.all()} + + def to_internal_value(self, data): + # Konwersja z formatu wejściowego + skill_levels = [] + for skill_name, level in data.items(): + try: + skill = Skill.objects.get(skill_name=skill_name) + except Skill.DoesNotExist: + raise serializers.ValidationError(f"Skill with name '{skill_name}' does not exist.") + skill_levels.append({'skill_id': skill.id, 'skill_level': level}) + return skill_levels + class MyUserSerializer(serializers.ModelSerializer): class Meta: model = MyUser @@ -22,7 +38,7 @@ class SkillLevelsSerializer(serializers.ModelSerializer): class JobListingSerializer(serializers.ModelSerializer): created_by = MyUserSerializer(read_only=True) anonymous_user_data = AnonymousUserDataSerializer(read_only=True) - skillLevels = SkillLevelsSerializer(read_only=True) + skill_levels = SkillLevelsField() class Meta: model = JobListing @@ -35,10 +51,18 @@ class JobListingSerializer(serializers.ModelSerializer): 'anonymous_user_data' ] + def create(self, validated_data): + skill_levels_data = validated_data.pop('skill_levels', []) + job_listing = JobListing.objects.create(**validated_data) + for skill_data in skill_levels_data: + skill_level = SkillLevels.objects.create(**skill_data) + job_listing.skillLevels.add(skill_level) + return job_listing + class CompanyLogoSerializer(serializers.ModelSerializer): class Meta: model = CompanyLogo - fields = ['id', 'company_logo'] + fields = ['id', 'company_nane','company_logo'] class SkillSerializer(serializers.ModelSerializer): class Meta: