2012-07-20 29 views
8

Sốcủa Django cho phép bạn thực hiện các yêu cầu POST và chỉ định dữ liệu yêu cầu dưới dạng dict.Máy khách thử nghiệm của Django có nhiều giá trị cho các khóa dữ liệu

Tuy nhiên, nếu tôi muốn gửi dữ liệu bắt chước các trường <select multiple> hoặc <input type="checkbox">, tôi cần gửi nhiều giá trị cho một khóa duy nhất trong dữ liệu dict.

Làm cách nào để thực hiện việc này?

Trả lời

13

Cách đơn giản nhất là để xác định các giá trị như một list hoặc tuple trong dict:

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

Hoặc bạn có thể sử dụng một MultiValueDict như giá trị.

+0

gì Django Mẫu lĩnh vực nên được sử dụng để làm sạch/xác nhận một 'list' hoặc 'tuple' các giá trị mà bạn đang gửi qua client.post? – Medorator

3

Chỉ cần gặp sự cố này! Thật không may, câu trả lời của bạn không hiệu quả đối với tôi, trong số FormView tôi đã đăng lên nó sẽ chỉ lấy ra một trong các giá trị được bao gồm, không phải tất cả các giá trị

Bạn cũng có thể tạo chuỗi truy vấn theo cách thủ công và đăng nó sử dụng nội dung loại 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') 
0
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') 
Các vấn đề liên quan