@@ -516,6 +516,43 @@ def filter(self, **kwargs):
516516 validator .filter_queryset (attrs = data , queryset = queryset , serializer = serializer )
517517 assert queryset .called_with == {'race_name' : 'bar' , 'position' : 1 }
518518
519+ def test_uniq_together_validation_uses_model_fields_method_field (self ):
520+ class TestSerializer (serializers .ModelSerializer ):
521+ position = serializers .SerializerMethodField ()
522+
523+ def get_position (self , obj ):
524+ return obj .position or 0
525+
526+ class Meta :
527+ model = NullUniquenessTogetherModel
528+ fields = ['race_name' , 'position' ]
529+
530+ serializer = TestSerializer ()
531+ expected = dedent ("""
532+ TestSerializer():
533+ race_name = CharField(max_length=100)
534+ position = SerializerMethodField()
535+ """ )
536+ assert repr (serializer ) == expected
537+
538+ def test_uniq_together_validation_uses_model_fields_with_source_field (self ):
539+ class TestSerializer (serializers .ModelSerializer ):
540+ pos = serializers .IntegerField (source = 'position' )
541+
542+ class Meta :
543+ model = NullUniquenessTogetherModel
544+ fields = ['race_name' , 'pos' ]
545+
546+ serializer = TestSerializer ()
547+ expected = dedent ("""
548+ TestSerializer():
549+ race_name = CharField(max_length=100, required=True)
550+ pos = IntegerField(source='position')
551+ class Meta:
552+ validators = [<UniqueTogetherValidator(queryset=NullUniquenessTogetherModel.objects.all(), fields=('race_name', 'pos'))>]
553+ """ )
554+ assert repr (serializer ) == expected
555+
519556
520557class UniqueConstraintModel (models .Model ):
521558 race_name = models .CharField (max_length = 100 )
0 commit comments