mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-27 08:29:59 +03:00
Include serialized model data when validating
When an instance is passed to a ModelSerializer, we might need fields that aren't specified in initial_data to run a validator. Specifically for UniqueTogether
This commit is contained in:
parent
3875d3284e
commit
11621ad5f7
|
@ -216,8 +216,11 @@ class BaseSerializer(Field):
|
|||
)
|
||||
|
||||
if not hasattr(self, '_validated_data'):
|
||||
validation_data = self.to_representation(self.instance) if self.instance else {}
|
||||
validation_data.update(self.initial_data)
|
||||
|
||||
try:
|
||||
self._validated_data = self.run_validation(self.initial_data)
|
||||
self._validated_data = self.run_validation(validation_data)
|
||||
except ValidationError as exc:
|
||||
self._validated_data = {}
|
||||
self._errors = exc.detail
|
||||
|
|
|
@ -1333,3 +1333,27 @@ class Issue6751Test(TestCase):
|
|||
serializer.save()
|
||||
|
||||
self.assertEqual(instance.char_field, 'value changed by signal')
|
||||
|
||||
|
||||
class Issue7489Model(models.Model):
|
||||
field1 = models.CharField(max_length=1)
|
||||
field2 = models.CharField(max_length=1)
|
||||
field3 = models.CharField(max_length=1)
|
||||
|
||||
class Meta:
|
||||
unique_together = ('field1', 'field2')
|
||||
|
||||
|
||||
class Issue7489Serializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Issue7489Model
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
class Issue7489Test(TestCase):
|
||||
def test_model_serializer_substitutes_default_on_unique_together_validation(self):
|
||||
Issue7489Model.objects.create(field1='A', field2='A')
|
||||
b = Issue7489Model.objects.create(field1='B', field2='B')
|
||||
# Attempt to validate the serializer for updating `field3` on instance `b`
|
||||
serializer = Issue7489Serializer(instance=b, data={'field3': 'X'})
|
||||
self.assertTrue(serializer.is_valid(), serializer.errors)
|
Loading…
Reference in New Issue
Block a user