-
Notifications
You must be signed in to change notification settings - Fork 76
Expand file tree
/
Copy pathserializers.py
More file actions
109 lines (80 loc) · 2.69 KB
/
Copy pathserializers.py
File metadata and controls
109 lines (80 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from rest_framework import serializers
from .models import (
ClassYear,
ClassRoom,
GradeLevel,
ClassLevel,
Subject,
Department,
Stream,
ReasonLeft,
StudentClass,
)
class ClassYearSerializer(serializers.ModelSerializer):
class Meta:
model = ClassYear
fields = "__all__"
class DepartmentSerializer(serializers.ModelSerializer):
class Meta:
model = Department
fields = "__all__"
class ClassLevelSerializer(serializers.ModelSerializer):
class Meta:
model = ClassLevel
fields = "__all__"
class StreamSerializer(serializers.ModelSerializer):
class Meta:
model = Stream
fields = "__all__"
class SubjectSerializer(serializers.ModelSerializer):
department = serializers.PrimaryKeyRelatedField(queryset=Department.objects.all())
class Meta:
model = Subject
fields = "__all__"
def validate_subject_code(self, value):
# Add custom validation if needed (e.g., regex validation)
if len(value) < 3:
raise serializers.ValidationError(
"Subject code must be at least 3 characters."
)
return value
class GradeLevelSerializer(serializers.ModelSerializer):
class Meta:
model = GradeLevel
fields = "__all__"
class ClassRoomSerializer(serializers.ModelSerializer):
name = serializers.SerializerMethodField()
stream = serializers.SerializerMethodField()
class_teacher = serializers.SerializerMethodField()
available_sits = serializers.ReadOnlyField()
class_status = serializers.ReadOnlyField()
class Meta:
model = ClassRoom
fields = "__all__"
def get_name(self, obj):
return obj.name.name # Access the name field of the related ClassLevel object
def get_stream(self, obj):
return obj.stream.name # Access the name field of the related Stream object
def get_class_teacher(self, obj):
return (
f"{obj.class_teacher.first_name} {obj.class_teacher.last_name}"
if obj.class_teacher
else None
)
class SchoolYearSerializer(serializers.ModelSerializer):
class Meta:
model = ClassYear
fields = "__all__"
class ReasonLeftSerializer(serializers.ModelSerializer):
class Meta:
model = ReasonLeft
fields = "__all__"
class StudentClassSerializer(serializers.ModelSerializer):
class Meta:
model = StudentClass
fields = "__all__"
def validate(self, data):
classroom = data.get("classroom")
if classroom.occupied_sits >= classroom.capacity:
raise serializers.ValidationError("This class is already full.")
return data