from rest_framework import serializers from .models import AcademicYear, Department, DepartmentHead, Specialty, Group, Student class AcademicYearSerializer(serializers.ModelSerializer): class Meta: model = AcademicYear fields = "__all__" class DepartmentSerializer(serializers.ModelSerializer): class Meta: model = Department fields = "__all__" class DepartmentHeadSerializer(serializers.ModelSerializer): head_name = serializers.SerializerMethodField() class Meta: model = DepartmentHead fields = ["id", "department", "head", "head_name"] def get_head_name(self, obj): return f"{obj.head.first_name} {obj.head.last_name}" class SpecialtySerializer(serializers.ModelSerializer): class Meta: model = Specialty fields = "__all__" class GroupSerializer(serializers.ModelSerializer): curator_name = serializers.SerializerMethodField() class Meta: model = Group fields = ["id", "name", "curator", "specialty", "curator_name"] def get_curator_name(self, obj): if obj.curator: return f"{obj.curator.first_name} {obj.curator.last_name}" return None class StudentSerializer(serializers.ModelSerializer): first_name = serializers.CharField(source="account.first_name") last_name = serializers.CharField(source="account.last_name") middle_name = serializers.CharField(source="account.middle_name") phone = serializers.CharField(source="account.phone") email = serializers.CharField(source="account.email") class Meta: model = Student fields = [ "id", "group", "first_name", "last_name", "middle_name", "phone", "email", ] def update(self, instance, validated_data): account_data = validated_data.pop("account", {}) instance.account.first_name = account_data.get("first_name", instance.account.first_name) instance.account.last_name = account_data.get("last_name", instance.account.last_name) instance.account.middle_name = account_data.get("middle_name", instance.account.middle_name) instance.account.phone = account_data.get("phone", instance.account.phone) instance.account.email = account_data.get("email", instance.account.email) instance.account.save() return super().update(instance, validated_data)