22from django .core .exceptions import ValidationError as ModelValidationError
33from profanity_check import predict
44from rest_framework .serializers import (
5+ BooleanField ,
6+ DateTimeField ,
57 ImageField ,
68 ModelSerializer ,
79 SerializerMethodField ,
810 SlugRelatedField ,
11+ URLField ,
912 ValidationError ,
1013)
1114
@@ -97,7 +100,7 @@ def get_condition(self, obj):
97100class SubletDataSerializer (ModelSerializer ):
98101 class Meta :
99102 model = Sublet
100- fields = ["address " , "beds" , "baths" , "start_date" , "end_date" ]
103+ fields = ["street_address " , "beds" , "baths" , "start_date" , "end_date" ]
101104
102105
103106# Unified serializer for all listing types (Items and Sublets); used for CRUD operations
@@ -108,16 +111,31 @@ class ListingSerializer(ListingTypeMixin, ModelSerializer):
108111 "model" : Item ,
109112 },
110113 "sublet" : {
111- "required_fields" : ["address" , "beds" , "baths" , "start_date" , "end_date" ],
114+ "required_fields" : [
115+ "street_address" ,
116+ "beds" ,
117+ "baths" ,
118+ "start_date" ,
119+ "end_date" ,
120+ ],
112121 "model" : Sublet ,
113122 },
114123 }
115124
116125 images = ListingImageSerializer (many = True , required = False , read_only = True )
117- tags = SlugRelatedField (many = True , slug_field = "name" , queryset = Tag .objects .all ())
126+ tags = SlugRelatedField (
127+ many = True ,
128+ slug_field = "name" ,
129+ queryset = Tag .objects .all (),
130+ required = False ,
131+ allow_empty = True ,
132+ )
118133 seller = UserSerializer (read_only = True )
119134 listing_type = SerializerMethodField ()
120135 additional_data = SerializerMethodField ()
136+ external_link = URLField (required = False , allow_blank = True , allow_null = True )
137+ negotiable = BooleanField (required = False , default = True )
138+ expires_at = DateTimeField (required = False , allow_null = True )
121139
122140 class Meta :
123141 model = Listing
@@ -240,7 +258,7 @@ def _create_sublet(self, validated_data, additional_data):
240258 tags = validated_data .pop ("tags" , None )
241259
242260 sublet = Sublet .objects .create (
243- address = additional_data .get ("address " ),
261+ street_address = additional_data .get ("street_address " ),
244262 beds = additional_data .get ("beds" ),
245263 baths = additional_data .get ("baths" ),
246264 start_date = additional_data .get ("start_date" ),
@@ -297,7 +315,7 @@ def _update_item(self, instance, additional_data):
297315
298316 def _update_sublet (self , instance , additional_data ):
299317 sublet = instance .sublet
300- sublet_fields = ["address " , "beds" , "baths" , "start_date" , "end_date" ]
318+ sublet_fields = ["street_address " , "beds" , "baths" , "start_date" , "end_date" ]
301319 for field in sublet_fields :
302320 if field in additional_data :
303321 setattr (sublet , field , additional_data [field ])
0 commit comments