Set child instance to an instance instead of QuerySet.

This commit is contained in:
Lukas Hambsch 2015-03-18 07:35:44 -07:00
parent e34e0536b1
commit 21fa1d4852
2 changed files with 38 additions and 0 deletions

View File

@ -545,6 +545,8 @@ class ListSerializer(BaseSerializer):
for item in data:
try:
if isinstance(self.instance, QuerySet):
self.child.instance = self.instance.get(pk=item['id'])
validated = self.child.run_validation(item)
except ValidationError as exc:
errors.append(exc.detail)

View File

@ -46,6 +46,42 @@ class ShouldValidateModelSerializer(serializers.ModelSerializer):
fields = ('renamed',)
class UniqueTogetherModel(models.Model):
foo = models.IntegerField()
bar = models.IntegerField()
class Meta(object):
unique_together = ('foo', 'bar')
class ExampleSerializer(serializers.ModelSerializer):
class Meta(object):
model = UniqueTogetherModel
class TestUniqueTogether(TestCase):
def test_validation(self):
"""
Ensure that validation works when model has unique together validation.
"""
UniqueTogetherModel.objects.all().delete()
obj = UniqueTogetherModel.objects.create(foo=1, bar=2)
s = ExampleSerializer(
UniqueTogetherModel.objects.all(),
data=[
{
'foo': 5,
'id': obj.pk,
}
],
partial=True,
many=True,
)
s.is_valid(raise_exception=True)
class TestPreSaveValidationExclusionsSerializer(TestCase):
def test_renamed_fields_are_model_validated(self):
"""