2016-12-05 18 views
0

request.data.get('answers_ids')返回str '2'而不是從APIClient數據發送的array ['1', '2']。但是,當我從休息框架web-gui發送數據的所有作品。Django restframework發送發佈數據從測試APIClient中斷

使用:

  • Django的== 1.10.4
  • djangorestframework == 3.5.3

tests.py:

class ApiCompletePoll(APITestCase): 
    def setUp(self): 
     self.user = User.objects.create(
      username='123', 
      password='123', 
      email='[email protected]' 
     ) 
     self.client = APIClient() 
     self.client.credentials(
      HTTP_AUTHORIZATION='Token ' + self.user.auth_token.key 
     ) 

    def test_complete_poll(self): 
     data = {'poll_id': 1, 'answers_ids': [1, 2]}  # SENT DATA 
     self.client.post(reverse('complete-poll'), data) 
     self.assertTrue(
      CompletedPoll.objects.filter(
       user=self.user, poll__id=data['poll_id'] 
      ) 
     ) 

views.py:

@api_view(http_method_names=['post', ]) 
def update_or_create_user_answers(request): 
    user = request.user 
    poll_id = request.data.get('poll_id', 0) 
    answers_ids = request.data.get('answers_ids', []) 

    print(list(request.data.items()), request.data, answers_ids) # GETTING DATA 

輸出:

[('answers_ids', '2'), ('poll_id', '1')] 
<QueryDict: {'answers_ids': ['1', '2'], 'poll_id': ['1']}> 
2 

回答

0

要檢索值的列表中,你需要使用.getlist()方法QueryDict傳遞的關鍵:

answers_ids = request.data.getlist('answers_ids', []) 

這應該輸出:['1', '2']

+0

THX,這樣可行 – waynee