私がやろうとしているのは、Pyramid、SQLAlchemy を使用した単純なブログ Web サイトです。私が選んだフォームモジュールは Coland を使った Deform です。したがって、今のところフォームにはnameとurlの 2 つのフィールドがあります。Url は名前フィールドを音訳で作成しますが、気にしません。したがって、同じ URL を持つ 2 つの記事を作成したくありません。どういうわけかCollandでバリデーターを作る必要があると思います。しかし問題は、バリデータがフィールドごとに実行され、モデル レコードごとに実行されないことです。つまり、urlフィールドのバリデーターを作成すると、メソッドにidやnameなどの別のフィールドに関する情報がないため、検証を実行できませんでした。
今のところ、2 時間かけて作成した文字列がいくつかあります =)
from slugify import slugify
def convertUrl(val):
return slugify(val) if val else val
class ArticleForm(colander.MappingSchema):
name = colander.SchemaNode(colander.String())
url = colander.SchemaNode(colander.String(),
preparer=convertUrl)
実際には、モデル レベル、つまり SQLAlchemy モデルでこのような検証を実行する必要があると考えましたが、もちろんそれ以上のルールは機能しません。そのようなルールは主に SQL スクリプト (CREATE TABLE) を作成するために存在するためです。
class Article(TBase, Base):
""" The SQLAlchemy declarative model class for a Article object. """
__tablename__ = 'article'
id = Column(Integer, primary_key=True)
name = Column(Text, unique=True)
url = Column(Text, unique=True)