2016-06-29 23 views
5

İleti gönderilerimdeki verileri işlemek için wtforms kullanıyorum. Belirli bir posta isteği, bir boole değeri de dahil olmak üzere çeşitli veriler gönderir.WTForms BooleanField, JSON yanlış değerini true olarak kabul eder

Benim formu şuna benzer:

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

ben isteği aldığınızda veri şuna benzer olduğunu görebilirsiniz:

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

Sen boolean alan "yanlış" olduğunu görebilirsiniz, ve ham verileri yazdırmak da gösteriyor ki, gerçek form alanını yazdırdığımda doğruyu elde ederim.

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

WTForms'ın yanlış boolean değerlerinin nasıl işleneceğini bilmeyebileceğini okudum. Bunu yapmanın doğru yolu nedir? Bunun yerine IntegerField kullanıyor musunuz?

Posta veritabanımdaki yanlış boolean değerlerini işleyen bir booleanfield ile yeni bir formum var.

cevap

8

WTForms gerçekten JSON verileriyle çalışmak için uygun değildir. Bu durumda, BooleanField, alınan değerin field.false_values içinde olduğunu ve ('false', '') varsayılanı olduğunu denetler. False nesnesi orada değil, bu yüzden doğru olarak kabul edilir.

Alana farklı bir false_values kümesi iletebilirsiniz.

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

Ya alanından önce bu bir yere yerleştirerek tüm örnekleri için yama ilk kez kullanılır.

BooleanField.false_values = {False, 'false', ''} 
JSON verilerini işlemek için bir seri kütüphane gibi Marshmallow kullanmak daha olabilir

.