Files
ProFi/education/serializers.py

76 lines
2.4 KiB
Python
Raw Normal View History

2025-05-19 12:54:50 +03:00
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)