हां, कस्टम वैधक अंतर्निहित वैकल्पिक और आवश्यक सत्यापनकर्ताओं की तरह सत्यापन प्रवाह को नियंत्रित कर सकते हैं। सत्यापन प्रवाह को नियंत्रित करने के लिए, आप StopValidation
अपवाद का उपयोग करते हैं, और कोई और सत्यापन नहीं किया जाएगा।
यदि किसी संदेश के साथ स्टॉप वैलिडेशन उठाया गया है, तो इसे त्रुटियों की सूची में जोड़ा जाएगा, अन्यथा यदि कोई संदेश नहीं है, तो कोई और त्रुटि नहीं जोड़ा जाएगा।
यदि आप इंटेगरफिल्ड, फ्लोटफिल्ड इत्यादि का उपयोग कर रहे हैं, तो आपको इनपुट प्रसंस्करण समय पर "प्रसंस्करण त्रुटियों" को ध्यान में रखना होगा। जिस तरह से वैकल्पिक सत्यापनकर्ता इसे संभालता है, यह इनपुट खाली होने पर सभी पिछली त्रुटियों को साफ़ करता है। चलो बस wtforms से वैकल्पिक सत्यापनकर्ता के लिए कोड पर एक त्वरित नज़र रखना/fields.py:
if not field.raw_data or isinstance(field.raw_data[0], basestring) and not field.raw_data[0].strip():
field.errors[:] = []
raise StopValidation()
आप चीजों को यह करता है में से एक देख सकते हैं अगर कोई इनपुट या खाली इनपुट है, यह साफ हो जाएगा किसी भी पिछली त्रुटियों को बाहर करो।
तो, चलिए आते हैं कि आप अपना कस्टम सत्यापनकर्ता कैसे कर सकते हैं।
from wtforms.validators import StopValidation
def myvalidator(form, field):
if not form.some_checkbox_field.data:
# clear out processing errors
field.errors[:] = []
# Stop further validators running
raise StopValidation()
फिर आप इस तरह की तरह अपने सत्यापनकर्ता इस्तेमाल कर सकते हैं:
from wtforms import BooleanField, IntegerField, Form, validators as v
class SomeForm(Form):
some_checkbox_field = BooleanField('Enable MyNumber')
mynumber = IntegerField('', [myvalidator, v.NumberRange(min=5, max=50)])
तो फिर, अगर चेकबॉक्स चेक किया जाता है, यह मान्य करेगा कि mynumber एक संख्या के रूप inputted था। इसके अलावा, नंबररेंज सत्यापनकर्ता चलाया जाएगा। यदि चेक नहीं किया गया है, तो त्रुटियों को मंजूरी दे दी जाएगी, और StopValidation नंबररेंज को चलने से रोक देगा।
संभावित डुप्लिकेट [WTForms में सशर्त रूप से वैकल्पिक क्षेत्र कैसे बनाएं?] (Http://stackoverflow.com/questions/8463209/how-to-make-a-field-condically-optional-in-wtforms) – nsfyn55