@@ -301,6 +301,49 @@ class Meta:
301301 ]
302302 }
303303
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+
304347 def test_allow_explict_override (self ):
305348 """
306349 Ensure validators can be explicitly removed..
@@ -357,13 +400,9 @@ class MockQueryset:
357400 def filter (self , ** kwargs ):
358401 self .called_with = kwargs
359402
360- class MockSerializer :
361- def __init__ (self , instance ):
362- self .instance = instance
363-
364403 data = {'race_name' : 'bar' }
365404 queryset = MockQueryset ()
366- serializer = MockSerializer (instance = self .instance )
405+ serializer = UniquenessTogetherSerializer (instance = self .instance )
367406 validator = UniqueTogetherValidator (queryset , fields = ('race_name' ,
368407 'position' ))
369408 validator .filter_queryset (attrs = data , queryset = queryset , serializer = serializer )
0 commit comments