2016-06-29 4 views
5

내 게시물 요청의 데이터를 처리하는 데 wtforms을 사용하고 있습니다. 하나의 특정 게시물 요청은 부울 값을 포함한 다양한 데이터를 보냅니다.WTForms BooleanField는 JSON false 값을 true로 처리합니다.

내 양식은 다음과 같습니다

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

내가 요청을받을 때 데이터가이 같다고 볼 수 있습니다

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

당신은 부울 필드가 "거짓"입니다 볼 수 있습니다, 원시 데이터를 인쇄하는 것은 그럴 수 있습니다. 그러나 실제 양식 필드를 인쇄하면 사실이됩니다.

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

나는 WTForms가 거짓 부울 값을 처리하는 방법을 알지 못할 수도 있음을 읽었습니다. 이 일을하는 올바른 방법은 무엇입니까? IntegerField을 대신 사용 하시겠습니까?

내 postgres 데이터베이스에서 거짓 부울 값을 처리하는 부울 필드가있는 다른 양식이 있습니다.

답변

8

WTForms은 실제로 JSON 데이터를 사용하지 않습니다. 이 경우 BooleanField은받은 값이 field.false_values이며 기본값은 ('false', '')입니다. False 개체는 거기에 없으므로 사실이라고 간주됩니다.

다른 false_values 세트를 필드에 전달할 수 있습니다.

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

또는 필드를 처음 사용하기 전에 어딘가에 배치하여 모든 인스턴스에 대해 패치하십시오.

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

Marshmallow과 같은 직렬화 라이브러리를 사용하여 JSON 데이터를 처리하는 것이 더 나을 수도 있습니다.