Django Rest Framework .DATA属性仅返回数组的第一项

时间:2015-07-15 13:48:39

标签: python django django-rest-framework

我有一个API端点,客户端POST一个JSON对象(一次邀请几个用户到项目)。

我的测试看起来像这样:

def test_new_style(self):
    note = 'this is a note'
    payload = {
        'invites': [
            {
                'email': 'test2@getmixim.com',
                'note': note
            },
            {
                'email': 'notauser@getmixim.com',
                'note': note
            }
        ]
    }

    # self.u1_client is a rest_framework.test.APIClient object
    response = self.u1_client.post('/api/projects/1/invite', payload)

我的APIView看起来像:

class InviteMember(APIView):
    permission_classes = (IsAuthenticated,)

    def post(self, request, project_pk):
        import pdb; pdb.set_trace()

我降落在一个外壳中,然后执行以下操作:

(Pdb) request
<rest_framework.request.Request object at 0x106bb4910>
(Pdb) request.DATA
<QueryDict: {u'invites': [u"{'note': 'this is a note', 'email': 'test2@getmixim.com'}", u"{'note': 'this is a note', 'email': 'notauser@getmixim.com'}"]}>
(Pdb) request.DATA['invites']
u"{'note': 'this is a note', 'email': 'notauser@getmixim.com'}"

很奇怪,对吗?我怎样才能获得一系列邀请词典?为什么DATA属性只是给我这个对象?

Django:v1.7.4
Django Rest Framework:v2.4.4

1 个答案:

答案 0 :(得分:3)

我找到了解决方案!问题是我的请求是作为查询字符串发送的。

将我的考试改为......

response = self.u1_client.post('/api/projects/1/invite', payload, format='json')

...解决了这个问题。

实际上,DRF APIClient将单个dicts编码为JSON,然后将它们嵌入到查询字符串中。