2017-10-27 5 views
0

클래스가 있다고 가정하십시오. 필드가 special_pin인데 null이 될 수 있지만 특정 컨텍스트에서는 null이 될 수 없습니다. 유효성 검사 함수 (validates_pin)를 작성하여 해당 필드의 유효성을 검사하려고합니다. 그러나 special_pin 필드가 null 인 경우 유효성 검사 기능이 실행되지 않습니다.null 필드에서 sqlalchemy.orm.validates를 사용하는 방법은 무엇입니까?

from sqlalchemy.orm import validates 

class User(db.Model): 
    user_type = db.column(db.String, nullable=False) 
    special_pin = db.column(db.String) 

    @validates('special_pin') 
    def validates_pin(self, key, field): 
    if self.user_type == 'special' 
    assert field, 'special user must have special pin' 
+0

당신이 결코'special_pin' 속성에 할당 없음을 의미합니까 : 귀하의 유스 케이스는 테이블 수준 check constraint에 적합처럼 보인다? [mcve]를 포함하십시오. 귀하의 DB가 그들을 지원하는 경우 귀하의 사건은 체크 제약 조건에 잘 맞는 것 같습니다. –

+0

예, 그것이 제가 의미했던 것입니다. postgreSQL을 사용하고 있는데 어떻게 제약 조건을 만들어야합니까? – tt123456

답변

0

validates() 검증 "아래에있는 내 코드뿐만 아니라 값이 할당되기 위해 속성의 이름을 수신, 또는 모음의 경우, 값이 컬렉션에 추가 할 참조 ". 따라서 입력란을 터치하지 않으면 유효성 검사가 수행되지 않습니다. "필드가 null"으로

class User(db.Model): 
    user_type = db.Column(db.String, nullable=False) 
    special_pin = db.Column(db.String) 

    __table_args__ = (
     # Note the trailing comma. __table_args__ should be a tuple or a dict. 
     db.CheckConstraint("user_type != 'special' OR special_pin IS NOT NULL", 
          name="check_special_user_has_pin"), 
    )