izaac/jobposting/serializers.py
Jakub K 94d9acaf79
All checks were successful
continuous-integration/drone Build is passing
serializery
2024-01-04 17:47:35 +01:00

70 lines
2.7 KiB
Python

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
fields = ['id', 'email', 'first_name', 'last_name']
class AnonymousUserDataSerializer(serializers.ModelSerializer):
class Meta:
model = AnonymousUserData
fields = ['id', 'email', 'first_name', 'last_name']
class SkillLevelsSerializer(serializers.ModelSerializer):
skill_id = serializers.PrimaryKeyRelatedField(read_only=True, source='skill.id')
class Meta:
model = SkillLevels
fields = ['skill_id', 'skill_level']
class JobListingSerializer(serializers.ModelSerializer):
created_by = MyUserSerializer(read_only=True)
anonymous_user_data = AnonymousUserDataSerializer(read_only=True)
skill_levels = SkillLevelsField()
class Meta:
model = JobListing
fields = [
'id', 'posting_option',
'company_name', 'name', 'content', 'minsalary', 'maxsalary',
'localization', 'created_by', 'created_at', 'status', 'status_paid',
'expiration_date', 'experience_level', 'employmentType', 'workFromHome',
'updated_at', 'skillLevels', 'contact_email', 'first_name', 'last_name',
'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_nane','company_logo']
class SkillSerializer(serializers.ModelSerializer):
class Meta:
model = Skill
fields = ['id', 'skill_name']