Django rest framework serializer.save() return “Invalid data. Expected a dictionary, but got group”

3,606 views
Skip to first unread message

Gary Ng

unread,
Nov 6, 2017, 11:22:00 PM11/6/17
to Django REST framework
There is a route /group/task, every time it is called, the log will be generated.

This is views.py


class GroupViewSet(viewsets.ViewSet):
       
....
       
@detail_route(methods=['post'], url_path='task')
       
def get_task(self, request, pk=None):
               
group = get_object_or_404(Group, pk=pk)
               
#group = ServerSerializer(group)
<--- tried but not work
                data = {
                   
"group": group,
                   
#"group": group.data, <--- tried but not work
               
}
                log_serializer
= LogSerializer(data=data)
       
if log_serializer.is_valid(raise_exception=True):
            log_serializer
.save()

This is serializer.py

class GroupSerializer(serializers.ModelSerializer):
class Meta:
    model
= Group
    fields
= ('id', 'name')

class LogSerializer(serializers.ModelSerializer):
   
group = GroupSerializer()
   
class Meta:
        model
= Log
        fields
= ('group', 'created')

The post responese:
{
    "group": {
        "non_field_errors": [
            "Invalid data. Expected a dictionary, but got group."
        ]
    }
}

Chris Foresman

unread,
Nov 7, 2017, 2:03:37 PM11/7/17
to Django REST framework
It might help to see how your models are arranged, but are you trying to _create_ a new Log that has a specific group attached to it? Because the serializer you've defined doesn't handle that case, I don't think. But, try this:

data = {
   "group": {
       "id": group.pk,
       "name": group.name,
   },
   # other relavant fields here
}
Reply all
Reply to author
Forward
0 new messages