假设我有一个班级:
我有一个字段special_pin
可以为null,但在特定上下文中不能为null。我想通过编写验证函数(validates_pin
)来验证该字段。但是,当special_pin
字段为空时,验证函数将不会运行。
请参阅下面的代码
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 :(得分:0)
validates()
验证器"接收属性的名称以及要分配的值,或者在集合的情况下,接收要添加到集合的值"。因此,如果未触摸该字段,则不会进行验证。您的用例似乎非常适合表级check constraint:
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"),
)