@@ -29,7 +29,7 @@ class Booking(models.Model):
2929 session_end_time = models .DateTimeField (null = True )
3030 booking_status = models .CharField (max_length = 20 , choices = BOOKING_STATUS_TYPES , default = PENDING )
3131 session_price = models .DecimalField (max_digits = 10 , decimal_places = 2 )
32- student = models .ForeignKey (User , on_delete = models .CASCADE , related_name = "student " )
32+ student = models .ForeignKey (User , on_delete = models .CASCADE , related_name = "student_bookings " )
3333 tutor = models .ForeignKey (User , on_delete = models .CASCADE , related_name = "tutor" )
3434 description = models .TextField (null = True , blank = True )
3535 payment_gateway_ref = models .UUIDField (primary_key = True , default = uuid .uuid4 , editable = False )
@@ -48,17 +48,21 @@ def is_paid(self):
4848 return self .payment_gateway_ref is not None
4949
5050 def reschedule_booking (self , new_date ):
51+ if self .session_date < now ():
52+ return False
5153 self .session_date = new_date
5254 self .save ()
5355
5456 def cancel_booking (self ):
5557 if self .session_date < now ():
5658 return False
5759 self .booking_status = self .REJECTED
58- self .save ()
60+ self .save (update_fields = [ 'booking_status' ] )
5961 return True
6062
6163 def booking_duration (self ):
64+ if not self .session_end_time :
65+ return timedelta (0 )
6266 return self .session_end_time - self .session_date
6367
6468 @classmethod
@@ -94,6 +98,7 @@ def __str__(self):
9498
9599 class Meta :
96100 ordering = ['-created_at' ] # Sort reviews by most recent first
101+ unique_together = ('tutor' , 'reviewer' )
97102
98103 def is_valid_review (self ):
99104 """Checks if the review has a valid rating and comments."""
0 commit comments