Django Rest Framework - 访问嵌套的json对象

时间:2015-10-22 19:49:03

标签: django django-rest-framework

我正在为这样的视图提供JSON -

{
    "username": "name",
    "first_name": "john",
    "last_name": "doe",
    "email": "jdoe@hotmail.com",
    "profile": {
        "company": "abc corp"
    }
}

然后我将其传递到以下视图中以发布 -

    def post(self, request, format=None):
        uuid = generate_uuid(request.data.get('username'))
        data = {'username': request.data.get('username'),
                'first_name': request.data.get('first_name'),
                'last_name': request.data.get('last_name'),
                'email': request.data.get('email'),
                'company': request.data.get('profile').('company'),
                'uuid': str(uuid)}
        serializer = UserSerializer(data=data)
        if serializer.is_valid():
            print serializer.data
#            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我很难理解如何构建data以保持嵌套值,因为您可以看到我还包括uuid的字段,它也将是在嵌套的profile对象中。

然后将这些传递到我的序列化器 -

class UserSerializer(serializers.ModelSerializer):
    profile = UserProfileSerializer()
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'profile')

我目前的视图在这一行上给出了语法错误 -

'company': request.data.get('profile').('company'),

我知道它错了,只是不确定它应该如何构建。

1 个答案:

答案 0 :(得分:0)

以下是此行的正确版本:

'company': request.data.get('profile', dict()).get('company'),

如果数据缺少一个'配置文件,它的作用是提供一个空的dict作为默认参数。对象,或者如果有对象,请在其上调用get(' company')。