【问题标题】:Django restframework send post data is broken from test APIClientDjango restframework 发送 post 数据从测试 APIClient 中损坏
【发布时间】:2016-12-05 21:24:28
【问题描述】:

request.data.get('answers_ids') 从 APIClient 数据发送时返回 str '2' 而不是 array ['1', '2']。但是当我从 rest framework web-gui 发送数据时,一切正常。

使用:

  • 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='123@123.ru'
        )
        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

【问题讨论】:

    标签: django python-3.x django-rest-framework


    【解决方案1】:

    要检索QueryDict 中传递的键的值列表,您需要使用.getlist() 方法:

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

    这应该输出:['1', '2']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2021-05-24
      • 2023-04-06
      相关资源
      最近更新 更多