Django的测试客户端具有多个数据键值

时间:2012-07-20 01:00:53

标签: django

Django的test client允许您执行POST次请求并将请求数据指定为dict

但是,如果我想发送模仿<select multiple><input type="checkbox">字段的数据,我需要为数据dict中的单个密钥发送多个值。

我该怎么做?

3 个答案:

答案 0 :(得分:17)

最简单的方法是在list中将值指定为tupledict

client.post('/foo', data={"key": ["value1", "value2"]})

或者,您可以使用MultiValueDict作为值。

答案 1 :(得分:3)

刚遇到这个问题!不幸的是,你的答案对我不起作用,在我发布的FormView中只会提取其中一个值,而不是所有值

您还应该能够手动构建查询字符串并使用内容类型x-www-form-urlencoded

发布它
some_str = 'key=value1&key=value2&test=test&key=value3'
client.post('/foo/', some_str, content_type='application/x-www-form-urlencoded')

答案 2 :(得分:1)

from django.core.urlresolvers import reverse
from django.utils.datastructures import MultiValueDict
from django.utils.http import urlencode

form_data = {'username': 'user name',
             'address':  'street',
             'allowed_hosts': ["host1", "host2"]
             }

response = client.post(reverse('new_user'),
                       urlencode(MultiValueDict(form_data), doseq=True),
                       content_type='application/x-www-form-urlencoded')