使い方の想定
schema.bind(query=DBSession.query(Person).filter(Person.gender=='male')
col=Person.first_name + " " + Person.last_name)
import colander as c | |
from . import validators | |
@c.deferred | |
def bind_queryable(node, kw): | |
return validators.QueryableValidator(kw["query"], kw["col"]) | |
class PersonSchema(c.Schema): | |
gender = c.SchemaNode(c.String(), validator=OneOf('male', 'female')) | |
organization = c.SchemaNode(c.Integer, validator=bind_queryable)) |
class QueryableValidator(object): | |
def __init__(self, query, col): | |
self.query = query | |
self.col = col | |
def __call__(self, node, value): | |
if not self.query.filter(self.col==value).exists(): | |
raise Invalid |
フィールド毎にbindしたい場合