Added the test case to report if we span more than one relation.

This commit is contained in:
Xavier Ordoquy 2014-02-13 09:52:38 +01:00
parent de0a072d5a
commit d2ded0ddad
2 changed files with 17 additions and 1 deletions

View File

@ -957,7 +957,7 @@ class ModelSerializer(Serializer):
# Raise an error if we span more than one relation
if len(keys) > 2:
self._errors[key] = 'Can not span more than a relation'
self._errors[key] = 'Can not span more than a relation.'
continue
# Mark the related instance as the one to save

View File

@ -1889,3 +1889,19 @@ class RelationSpanningSerializerTest(TestCase):
serializer = TicketSerializer(ticket, data={'username': 'doe'})
self.assertFalse(serializer.is_valid())
self.assertEqual(serializer.errors, {'username': 'Related object does not exist.'})
def test_multiple_model_traversal_update(self):
"""Update a field through a foreign key during an update."""
class TicketSerializer(serializers.ModelSerializer):
username = fields.CharField(source='assigned.demo.name')
class Meta:
model = Ticket
fields = ('username',)
owner = Person.objects.create(name='john')
reviewer = Person.objects.create(name='reviewer')
ticket = Ticket.objects.create(assigned=owner, reviewer=reviewer)
serializer = TicketSerializer(ticket, data={'username': 'doe'})
self.assertFalse(serializer.is_valid())
self.assertEqual(serializer.errors, {'username': 'Can not span more than a relation.'})