2015-07-15 3 views
1

У меня есть конечная точка API, в которой клиенты отправляют объект JSON (чтобы пригласить сразу нескольких пользователей к проекту).Django Rest Framework .DATA-атрибут, возвращающий только первый элемент массива

Мой тест выглядит следующим образом:

def test_new_style(self): 
    note = 'this is a note' 
    payload = { 
     'invites': [ 
      { 
       'email': '[email protected]', 
       'note': note 
      }, 
      { 
       'email': '[email protected]', 
       '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': '[email protected]'}", u"{'note': 'this is a note', 'email': '[email protected]'}"]}> 
(Pdb) request.DATA['invites'] 
u"{'note': 'this is a note', 'email': '[email protected]'}" 

Странно, правда? Как я могу получить доступ к массиву пригласительных словарей? Почему атрибут DATA не дает мне объект?


Джанго: v1.7.4
Джанго Rest Framework: v2.4.4

ответ

3

Я нашел решение! Проблема в том, что мой запрос отправлялся как строка запроса.

Изменение моего теста ...

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

... исправляет эту проблему.

На самом деле DRIC APIClient кодировал отдельные dicts как JSON, а затем встраивал их в строку запроса.

+1

Действительно. В настоящее время мы создадим полезное сообщение об ошибке, если вложенные структуры передаются в многопроцессорный кодер в тестовых случаях. –

+1

@TomChristie, это очень полезно, спасибо. Кроме того, спасибо за DRF, приятно работать с такой хорошо разработанной инфраструктурой. – joerick

Смежные вопросы