@@ -301,6 +301,49 @@ class Meta:
301
301
]
302
302
}
303
303
304
+ def test_read_only_fields_with_default_and_source (self ):
305
+ class ReadOnlySerializer (serializers .ModelSerializer ):
306
+ name = serializers .CharField (source = 'race_name' , default = 'test' , read_only = True )
307
+
308
+ class Meta :
309
+ model = UniquenessTogetherModel
310
+ fields = ['name' , 'position' ]
311
+ validators = [
312
+ UniqueTogetherValidator (
313
+ queryset = UniquenessTogetherModel .objects .all (),
314
+ fields = ['name' , 'position' ]
315
+ )
316
+ ]
317
+
318
+ serializer = ReadOnlySerializer (data = {'position' : 1 })
319
+ assert serializer .is_valid (raise_exception = True )
320
+
321
+ def test_writeable_fields_with_source (self ):
322
+ class WriteableSerializer (serializers .ModelSerializer ):
323
+ name = serializers .CharField (source = 'race_name' )
324
+
325
+ class Meta :
326
+ model = UniquenessTogetherModel
327
+ fields = ['name' , 'position' ]
328
+ validators = [
329
+ UniqueTogetherValidator (
330
+ queryset = UniquenessTogetherModel .objects .all (),
331
+ fields = ['name' , 'position' ]
332
+ )
333
+ ]
334
+
335
+ serializer = WriteableSerializer (data = {'name' : 'test' , 'position' : 1 })
336
+ assert serializer .is_valid (raise_exception = True )
337
+
338
+ # Validation error should use seriazlier field name, not source
339
+ serializer = WriteableSerializer (data = {'position' : 1 })
340
+ assert not serializer .is_valid ()
341
+ assert serializer .errors == {
342
+ 'name' : [
343
+ 'This field is required.'
344
+ ]
345
+ }
346
+
304
347
def test_allow_explict_override (self ):
305
348
"""
306
349
Ensure validators can be explicitly removed..
@@ -357,13 +400,9 @@ class MockQueryset:
357
400
def filter (self , ** kwargs ):
358
401
self .called_with = kwargs
359
402
360
- class MockSerializer :
361
- def __init__ (self , instance ):
362
- self .instance = instance
363
-
364
403
data = {'race_name' : 'bar' }
365
404
queryset = MockQueryset ()
366
- serializer = MockSerializer (instance = self .instance )
405
+ serializer = UniquenessTogetherSerializer (instance = self .instance )
367
406
validator = UniqueTogetherValidator (queryset , fields = ('race_name' ,
368
407
'position' ))
369
408
validator .filter_queryset (attrs = data , queryset = queryset , serializer = serializer )
0 commit comments