2015-09-14 9 views
19

मैं कुप्पी से sqlalchemy.orm में @validates डेकोरेटर का उपयोग किया गया क्षेत्रों मान्य करने के लिए, और सब कुछ ठीक है जब तक सभी फ़ील्ड जैसे एक दूसरे से स्वतंत्र हैं चला गया है:बोतल एक साथ डेकोरेटर से अधिक फ़ील्ड सत्यापित करता

@validates('field_one') 
def validates_field_one(self, key, value): 
    #field one validation 

@validates('field_two') 
def validates_field_two(self, key, value): 
    #field two validation 

हालांकि, अब मुझे कुछ सत्यापन करने की आवश्यकता है जिसके लिए field_one और field_two तक पहुंच की आवश्यकता होगी। ऐसा लगता है कि पुष्टि पुष्टि डेकोरेटर करने के लिए कई तर्क स्वीकार करता है की तरह हालांकि, यह केवल मान्यता समारोह एक बार प्रत्येक तर्क के लिए चलाया जाएगा, जैसे:

सत्यापित करें field_one के कार्य प्रवाह में
@validates('field_one', 'field_two') 
def validates_fields(self, keys, values): 
    #field validation 

परिणाम और फिर field_two को मान्य। हालांकि, मैं एक ही समय में दोनों को मान्य करना चाहता हूं (जिसका एक छोटा सा उदाहरण यह कहता है कि field_one का मान field_two का मान नहीं है, जिसका एक उदाहरण ग्राफ़ में स्वयं-लूप को अस्वीकार कर देगा जहां field_one और field_two नोड्स का संदर्भ लें और यह किनारे पर सत्यापन कर रहा है)। ऐसा करने के लिए जाने का सबसे अच्छा तरीका कैसे होगा?

उत्तर

9

मॉडल पर परिभाषित क्रम में फ़ील्ड को ऑर्डर करें। फिर जांचें कि आखिरी फ़ील्ड मान्य है या नहीं। अन्यथा अनचेक मूल्य को वापस करें। यदि वैधकर्ता पहले के किसी एक फ़ील्ड को मान्य कर रहा है, तो उनमें से कुछ अभी तक सेट नहीं होंगे।

@validates('field_one', 'field_two') 
def validates_fields(self, key, value): 
    if key == 'field_two': 
     assert self.field_one != value 
    return value 

this example देखें।

संबंधित मुद्दे