1-
21from django .contrib .auth import get_user_model
32from django .core .exceptions import ValidationError as ModelValidationError
43from profanity_check import predict
@@ -126,6 +125,7 @@ def get_longitude(self, obj):
126125 return float (approx_lon )
127126 return None
128127
128+
129129# Unified serializer for all listing types (Items and Sublets); used for CRUD operations
130130class ListingSerializer (ListingTypeMixin , ModelSerializer ):
131131 LISTING_TYPE_CONFIG = {
@@ -156,7 +156,7 @@ class ListingSerializer(ListingTypeMixin, ModelSerializer):
156156 seller = UserSerializer (read_only = True )
157157 listing_type = SerializerMethodField ()
158158 additional_data = SerializerMethodField ()
159- is_favorited = SerializerMethodField ()
159+ is_saved = SerializerMethodField ()
160160 external_link = URLField (required = False , allow_blank = True , allow_null = True )
161161 negotiable = BooleanField (required = False , default = True )
162162 expires_at = DateTimeField (required = False , allow_null = True )
@@ -168,7 +168,7 @@ class Meta:
168168 "seller" ,
169169 "buyers" ,
170170 "tags" ,
171- "favorites " ,
171+ "saved " ,
172172 "title" ,
173173 "description" ,
174174 "external_link" ,
@@ -179,15 +179,15 @@ class Meta:
179179 "images" ,
180180 "listing_type" ,
181181 "additional_data" ,
182- "is_favorited " ,
182+ "is_saved " ,
183183 ]
184184 read_only_fields = [
185185 "id" ,
186186 "created_at" ,
187187 "seller" ,
188188 "buyers" ,
189189 "images" ,
190- "favorites " ,
190+ "saved " ,
191191 ]
192192
193193 def validate (self , attrs ):
@@ -221,11 +221,11 @@ def validate(self, attrs):
221221
222222 return super ().validate (attrs )
223223
224- def get_is_favorited (self , obj ):
224+ def get_is_saved (self , obj ):
225225 request = self .context .get ("request" )
226226 if not request or not request .user or not request .user .is_authenticated :
227227 return False
228- return request .user .listings_favorited .filter (id = obj .id ).exists ()
228+ return request .user .listings_saved .filter (id = obj .id ).exists ()
229229
230230 def validate_title (self , value ):
231231 if self .contains_profanity (value ):
@@ -291,7 +291,6 @@ def _create_sublet(self, validated_data, additional_data):
291291 latitude = additional_data .get ("latitude" )
292292 longitude = additional_data .get ("longitude" )
293293
294-
295294 if latitude is not None :
296295 latitude = float (latitude )
297296 if longitude is not None :
@@ -374,8 +373,8 @@ def _update_sublet(self, instance, additional_data):
374373# Read-only serializer for use when reading a single listing
375374class ListingSerializerPublic (ListingTypeMixin , ModelSerializer ):
376375 buyer_count = SerializerMethodField ()
377- favorite_count = SerializerMethodField ()
378- is_favorited = SerializerMethodField ()
376+ saved_count = SerializerMethodField ()
377+ is_saved = SerializerMethodField ()
379378 tags = SlugRelatedField (many = True , slug_field = "name" , queryset = Tag .objects .all ())
380379 images = ListingImageURLSerializer (many = True )
381380 seller = UserSerializer (read_only = True )
@@ -396,29 +395,29 @@ class Meta:
396395 "negotiable" ,
397396 "expires_at" ,
398397 "images" ,
399- "favorite_count " ,
398+ "saved_count " ,
400399 "listing_type" ,
401400 "additional_data" ,
402- "is_favorited " ,
401+ "is_saved " ,
403402 ]
404403 read_only_fields = fields
405404
406405 def get_buyer_count (self , obj ):
407406 return obj .buyers .count ()
408407
409- def get_favorite_count (self , obj ):
410- return obj .favorites .count ()
408+ def get_saved_count (self , obj ):
409+ return obj .saved .count ()
411410
412- def get_is_favorited (self , obj ):
411+ def get_is_saved (self , obj ):
413412 request = self .context .get ("request" )
414413 if not request or not request .user or not request .user .is_authenticated :
415414 return False
416- return request .user .listings_favorited .filter (id = obj .id ).exists ()
415+ return request .user .listings_saved .filter (id = obj .id ).exists ()
417416
418417
419418# Read-only serializer for use when pulling all listings /etc
420419class ListingSerializerList (ListingTypeMixin , ModelSerializer ):
421- favorite_count = SerializerMethodField ()
420+ saved_count = SerializerMethodField ()
422421 tags = SlugRelatedField (many = True , slug_field = "name" , queryset = Tag .objects .all ())
423422 images = ListingImageURLSerializer (many = True )
424423 seller = UserSerializer (read_only = True )
@@ -435,11 +434,11 @@ class Meta:
435434 "price" ,
436435 "expires_at" ,
437436 "images" ,
438- "favorite_count " ,
437+ "saved_count " ,
439438 "listing_type" ,
440439 "additional_data" ,
441440 ]
442441 read_only_fields = fields
443442
444- def get_favorite_count (self , obj ):
445- return obj .favorites .count ()
443+ def get_saved_count (self , obj ):
444+ return obj .saved .count ()
0 commit comments