2013-08-31 5 views
6

एसक्यूएलकेकी दस्तावेज़ बताते हैं कि किसी मॉडल को सत्यापन जोड़ने के लिए @ validates सजावट का उपयोग कैसे करें।दो फ़ील्ड के लिए sqlalchemy validator

from sqlalchemy.orm import validates 

class EmailAddress(Base): 
    __tablename__ = 'address' 

    id = Column(Integer, primary_key=True) 
    email = Column(String) 

    @validates('email') 
    def validate_email(self, key, address): 
     assert '@' in address 
     return address 

मैं दो तिथियों के साथ एक मॉडल मिल गया है, और मैं एक सत्यापनकर्ता सुनिश्चित एक तारीख हमेशा दूसरे से बड़ा है बनाना चाहते हैं। क्या मॉडल स्तर सत्यापनकर्ता बनाना संभव है? यदि ऐसा है तो वाक्यविन्यास क्या है?

+0

आप क्यों नहीं बस एक मान्य नहीं कर सकता और यकीन है कि यह अन्य में आवश्यकताओं को पूरा कर रही है:

@validates('started_at', 'stopped_at') def do_validation(self, key, field): return field 

कृपया, इस कोड की जांच? जैसे 'self.repeat_email == पता' या इसी तरह का दावा करें? – javex

+0

शायद यह काम कर सकता है, हालांकि मुझे प्रारंभिकरण के दौरान किसी भी मुद्दे को जाल की आवश्यकता होगी। मैं वास्तव में प्रति फ़ील्ड कुछ मान्यताओं को परिभाषित करना चाहता हूं, और एक पंक्ति सत्यापनकर्ता यह निर्धारित करने के लिए कि फ़ील्ड मान्य स्थिति बनाते हैं या नहीं। यह सिर्फ एक स्थान पर पंक्ति सत्यापन होने के लिए और अधिक स्पष्ट और रखरखाव महसूस करता है और विभिन्न फ़ील्ड सत्यापनकर्ताओं में बिखरा हुआ नहीं है। – danatron

उत्तर

8

यहां वैधकर्ताओं के लिए एक छोटा सा उदाहरण है।

आप अपने मॉडल की घोषणा में चेककोनस्ट्रेन का उपयोग कर सकते हैं। या आप @ validates सजावट का उपयोग कर सकते हैं। लेकिन पहले तर्कों में प्रत्येक नाम के लिए स्क्लेक्लेमी द्वारा इसे एक कहा जाएगा। https://gist.github.com/matrixise/6417293

+0

धन्यवाद, यही वही है जो मुझे चाहिए था। – danatron

+2

जिस क्रम में 'start_at' और 'stop_at' कहा जाता है वह यादृच्छिक है। – blurrcat

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