@@ -15,7 +15,6 @@ class UserSerializer(serializers.ModelSerializer):
1515 password = serializers .CharField (write_only = True , required = False )
1616 image = serializers .ImageField (required = False , allow_null = True )
1717 device_id = serializers .CharField (required = False , allow_blank = True )
18-
1918 class Meta :
2019 model = User
2120 fields = [
@@ -25,20 +24,19 @@ class Meta:
2524 read_only_fields = ["id" , "date_joined" ]
2625
2726 def validate (self , attrs ):
28- user_type = attrs .get ('user_type' )
29- device_id = attrs .get ('device_id' )
30-
27+ user_type = attrs .get ('user_type' , self .instance .user_type if self .instance else None )
28+ device_id_str = attrs .get ('device_id' , self .instance .device_id .device_id if self .instance and self .instance .device_id else None )
3129
32- if user_type == 'Farmer' and (not device_id or device_id .strip () == '' ):
30+ if user_type == 'Farmer' and (not device_id_str or device_id_str .strip () == '' ):
3331 raise serializers .ValidationError ({
3432 'device_id' : 'This field is required for Farmer users.'
3533 })
3634
37- if device_id and not MCU .objects .filter (device_id = device_id ).exists ():
35+ if device_id_str and not MCU .objects .filter (device_id = device_id_str ).exists ():
3836 raise serializers .ValidationError ({
39- 'device_id' : f"The device ID '{ device_id } ' does not exist."
37+ 'device_id' : f"The device ID '{ device_id_str } ' does not exist."
4038 })
41-
39+
4240 return attrs
4341
4442 def create (self , validated_data ):
@@ -72,6 +70,28 @@ def create(self, validated_data):
7270 return user
7371
7472
73+ def update (self , instance , validated_data ):
74+ password = validated_data .pop ("password" , None )
75+ if password :
76+ instance .set_password (password )
77+
78+ device_id_str = validated_data .pop ('device_id' , None )
79+ if device_id_str :
80+ instance .device_id = MCU .objects .get (device_id = device_id_str )
81+ elif device_id_str is not None :
82+ instance .device_id = None
83+ elif 'device_id' not in self .initial_data :
84+ pass
85+ else :
86+ instance .device_id = None
87+
88+ for attr , value in validated_data .items ():
89+ setattr (instance , attr , value )
90+
91+ instance .save ()
92+ return instance
93+
94+
7595class SignupSerializer (serializers .ModelSerializer ):
7696 username = serializers .CharField (
7797 validators = [UniqueValidator (queryset = User .objects .all (), message = "Username already taken." )]
@@ -190,7 +210,7 @@ def validate_email(self, value):
190210 otp = random .randint (1000 , 9999 )
191211 cache .set (f"otp_{ user .id } " , otp , timeout = 600 )
192212 return value
193-
213+
194214class VerifyCodeSerializer (serializers .Serializer ):
195215 email = serializers .EmailField ()
196216 otp = serializers .CharField (max_length = 4 )
@@ -204,7 +224,7 @@ def validate(self, data):
204224 raise serializers .ValidationError ("Invalid or expired OTP" )
205225 cache .set (f"otp_verified_{ user .id } " , True , timeout = 600 )
206226 return data
207-
227+
208228class ResetPasswordSerializer (serializers .Serializer ):
209229 email = serializers .EmailField ()
210230 password = serializers .CharField (write_only = True , min_length = 8 )
@@ -224,7 +244,7 @@ def save(self, **kwargs):
224244 cache .delete (f"otp_{ user .id } " )
225245 cache .delete (f"otp_verified_{ user .id } " )
226246 return user
227-
247+
228248class ThresholdSerializer (serializers .ModelSerializer ):
229249 class Meta :
230250 model = MCU
0 commit comments