Better catching of error cases in .update and .create. · Issue #2202 · encode/django-rest-framework (original) (raw)

When I do a PUT through the API browser to a view whose serializer contains a source property:

last_name = serializers.CharField(source='user.last_name')

I receive the following error:

Cannot assign "{'first_name': u'first', 'last_name': u'last'}": "ContactInfo.user" must be a "User" instance

I've created a bare-bones django project that reproduces the error. Of particular note are the serializers and the model.

Relevant excerpt of IRC conversation leading to this ticket:

<BrianHV> if you clone the repo, install the stuff in the requirements.txt (just django
          1.6 and DRF 3), set up a user, and use admin to create a ContactInfo for the
          user, you should be able to reproduce
<BrianHV> I'm testing through the API browser, btw.
<kevin-brown> Yeah, I think I know what is happening
<kevin-brown> `validated_data` is being (correctly?) generated as a nested dictionary,
              and that's being assigned to the `user` parameter directly
<kevin-brown> If you can open a ticket explaining that it works in DRF 2.4, that'd be
              helpful
<kevin-brown> In DRF 2.4, it would traverse the relation and assign the properties
              directly