11from django .forms .models import model_to_dict
22from rest_framework import serializers
33
4- from .models import CustomUser , Expert , Investor , Member , Mentor
4+ from .models import CustomUser , Expert , Investor , Member , Mentor , UserAchievement
5+
6+
7+ class AchievementListSerializer (serializers .ModelSerializer ):
8+ class Meta :
9+ model = UserAchievement
10+ fields = [
11+ "id" ,
12+ "title" ,
13+ "status" ,
14+ ]
15+ ref_name = "Users"
516
617
718class MemberSerializer (serializers .ModelSerializer ):
@@ -45,6 +56,7 @@ class UserDetailSerializer(serializers.ModelSerializer):
4556 investor = InvestorSerializer (required = False )
4657 expert = ExpertSerializer (required = False )
4758 mentor = MentorSerializer (required = False )
59+ achievements = AchievementListSerializer (required = False , many = True )
4860
4961 class Meta :
5062 model = CustomUser
@@ -55,6 +67,7 @@ class Meta:
5567 "first_name" ,
5668 "last_name" ,
5769 "patronymic" ,
70+ "birthday" ,
5871 "speciality" ,
5972 "avatar" ,
6073 "city" ,
@@ -63,6 +76,7 @@ class Meta:
6376 "investor" ,
6477 "expert" ,
6578 "mentor" ,
79+ "achievements" ,
6680 ]
6781
6882 def update (self , instance , validated_data ):
@@ -90,9 +104,9 @@ def update(self, instance, validated_data):
90104 # maybe it's better to write ALLOWED_UPDATABLE_FIELDS = ["first_name", "last_name", ...]
91105 IMMUTABLE_FIELDS = ("email" , "user_type" , "is_active" , "password" )
92106 USER_TYPE_FIELDS = ("member" , "investor" , "expert" , "mentor" )
93-
107+ RELATED_FIELDS = ( "achievements" ,)
94108 for attr , value in validated_data .items ():
95- if attr in IMMUTABLE_FIELDS + USER_TYPE_FIELDS :
109+ if attr in IMMUTABLE_FIELDS + USER_TYPE_FIELDS + RELATED_FIELDS :
96110 continue
97111 setattr (instance , attr , value )
98112
@@ -113,18 +127,32 @@ class Meta:
113127 model = CustomUser
114128 fields = [
115129 "id" ,
116- "user_type" ,
117130 "email" ,
131+ "user_type" ,
118132 "first_name" ,
119133 "last_name" ,
120134 "patronymic" ,
121135 "avatar" ,
136+ "speciality" ,
137+ "birthday" ,
122138 "is_active" ,
123139 "password" ,
124140 ]
125141 extra_kwargs = {"password" : {"write_only" : True }}
126142
127143
144+ class AchievementDetailSerializer (serializers .ModelSerializer ):
145+ class Meta :
146+ model = UserAchievement
147+ fields = [
148+ "id" ,
149+ "title" ,
150+ "status" ,
151+ "user" ,
152+ ]
153+ ref_name = "Users"
154+
155+
128156class EmailSerializer (serializers .Serializer ):
129157 email = serializers .EmailField ()
130158
0 commit comments