@@ -2444,12 +2444,6 @@ class Meta:
2444
2444
"end_time" ,
2445
2445
)
2446
2446
2447
- def validate_username (self , value ):
2448
- user = get_user_model ().objects .filter (username = value ).first ()
2449
- if not user :
2450
- raise serializers .ValidationError ("Please provide a valid username!" )
2451
- return value
2452
-
2453
2447
def create (self , validated_data ):
2454
2448
username = validated_data .get ("user" ).pop ("username" )
2455
2449
validated_data ["user" ] = get_user_model ().objects .get (username = username )
@@ -2462,13 +2456,50 @@ def create(self, validated_data):
2462
2456
return super ().create (validated_data )
2463
2457
2464
2458
def update (self , instance , validated_data ):
2465
- user_field = validated_data .pop ("user" , None )
2466
- if user_field :
2459
+ if user_field := validated_data .pop ("user" , None ):
2467
2460
username = user_field .pop ("username" )
2468
2461
user = get_user_model ().objects .get (username = username )
2469
2462
instance .user = user
2470
2463
return super ().update (instance , validated_data )
2471
2464
2465
+ def validate (self , data ):
2466
+ username = None
2467
+ if user_field := data .get ("user" ) or not self .instance :
2468
+ username = user_field .get ("username" )
2469
+ user = get_user_model ().objects .filter (username = username ).first ()
2470
+ if not user :
2471
+ raise serializers .ValidationError ("Please provide a valid username!" )
2472
+
2473
+ application_pk = self .context ["view" ].kwargs .get ("application_pk" )
2474
+ application = ClubApplication .objects .filter (pk = application_pk ).first ()
2475
+
2476
+ if not application :
2477
+ raise serializers .ValidationError ("Invalid application id!" )
2478
+
2479
+ if (
2480
+ (
2481
+ not self .instance
2482
+ or (username and self .instance .user .username != username )
2483
+ )
2484
+ and ApplicationExtension .objects .filter (
2485
+ user = user , application = application
2486
+ ).exists ()
2487
+ ):
2488
+ raise serializers .ValidationError (
2489
+ "An extension for this user and application already exists!"
2490
+ )
2491
+
2492
+ extension_end_time = data .get ("end_time" )
2493
+ if (
2494
+ extension_end_time
2495
+ and extension_end_time <= application .application_end_time
2496
+ ):
2497
+ raise serializers .ValidationError (
2498
+ "Extension end time must be greater than the application end time!"
2499
+ )
2500
+
2501
+ return data
2502
+
2472
2503
2473
2504
class ApplicationSubmissionSerializer (serializers .ModelSerializer ):
2474
2505
committee = ApplicationCommitteeSerializer (required = False , read_only = True )
0 commit comments