2016-06-29 18 views
5

Tôi đang sử dụng wtforms để xử lý dữ liệu từ các yêu cầu bài đăng của mình. Một yêu cầu đăng nhất định gửi nhiều loại dữ liệu bao gồm giá trị boolean.WTForms BooleanField xử lý giá trị giả JSON là true

dạng của tôi trông như thế này:

class EditFileForm(Form): 
    title = StringField('title') 
    shared = BooleanField('shared') 
    fileID = IntegerField('fileID') 
    userID = IntegerField('userID') 

tôi có thể thấy rằng khi tôi nhận được yêu cầu dữ liệu trông như thế này:

data = MultiDict(mapping=request.json) 
print(data) 
>>MultiDict([(u'shared', False), (u'title', u'File5'), (u'userID', 1), (u'fileID', 16)]) 

Bạn có thể thấy lĩnh vực boolean là "false", và in dữ liệu thô cho thấy rằng quá Tuy nhiên, khi tôi in trường mẫu thực tế tôi nhận được sự thật.

print(form.shared.raw_data) 
[False] 
print(form.shared.data) 
True 

Tôi đọc rằng WTForms có thể không biết cách xử lý các giá trị boolean sai. Cách thích hợp để làm điều này là gì? Sử dụng một số IntegerField để thay thế?

Tôi có một biểu mẫu khác với trường booleanfield xử lý các giá trị boolean sai từ cơ sở dữ liệu của tôi sau khi đăng bài tốt.

Trả lời

8

WTForms không thực sự có ý nghĩa để làm việc với dữ liệu JSON. Trong trường hợp này, BooleanField kiểm tra xem giá trị nhận được là trong field.false_values, mặc định là ('false', ''). Đối tượng False không có trong đó, vì vậy nó được coi là đúng.

Bạn có thể chuyển một bộ khác nhau của false_values cho trường.

BooleanField(false_values={False, 'false', ''}) 

Hoặc vá nó cho tất cả các trường hợp bằng cách đặt địa điểm này trước khi trường được sử dụng lần đầu tiên.

BooleanField.false_values = {False, 'false', ''} 

Bạn nên sử dụng thư viện tuần tự hóa như Marshmallow để xử lý dữ liệu JSON.

Các vấn đề liên quan