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+ ]
515
616
717class MemberSerializer (serializers .ModelSerializer ):
@@ -45,6 +55,7 @@ class UserDetailSerializer(serializers.ModelSerializer):
4555 investor = InvestorSerializer (required = False )
4656 expert = ExpertSerializer (required = False )
4757 mentor = MentorSerializer (required = False )
58+ achievements = AchievementListSerializer (required = False , many = True )
4859
4960 class Meta :
5061 model = CustomUser
@@ -63,6 +74,7 @@ class Meta:
6374 "investor" ,
6475 "expert" ,
6576 "mentor" ,
77+ "achievements" ,
6678 ]
6779
6880 def update (self , instance , validated_data ):
@@ -90,12 +102,19 @@ def update(self, instance, validated_data):
90102 # maybe it's better to write ALLOWED_UPDATABLE_FIELDS = ["first_name", "last_name", ...]
91103 IMMUTABLE_FIELDS = ("email" , "user_type" , "is_active" , "password" )
92104 USER_TYPE_FIELDS = ("member" , "investor" , "expert" , "mentor" )
93-
105+ RELATED_FIELDS = ( "achievements" ,)
94106 for attr , value in validated_data .items ():
95- if attr in IMMUTABLE_FIELDS + USER_TYPE_FIELDS :
107+ if attr in IMMUTABLE_FIELDS + USER_TYPE_FIELDS + RELATED_FIELDS :
96108 continue
97109 setattr (instance , attr , value )
98110
111+ # if "achievements" in validated_data:
112+ # instance.achievements.all().delete()
113+ # instance.achievements.clear()
114+ # for achievement in validated_data["achievements"]:
115+ # obj = UserAchievement(**achievement)
116+ # obj.save()
117+ # instance.achievements.add(obj)
99118 instance .save ()
100119
101120 return instance
@@ -127,6 +146,17 @@ class Meta:
127146 extra_kwargs = {"password" : {"write_only" : True }}
128147
129148
149+ class AchievementDetailSerializer (serializers .ModelSerializer ):
150+ class Meta :
151+ model = UserAchievement
152+ fields = [
153+ "id" ,
154+ "title" ,
155+ "status" ,
156+ "user" ,
157+ ]
158+
159+
130160class EmailSerializer (serializers .Serializer ):
131161 email = serializers .EmailField ()
132162
0 commit comments