使用Coland和SQLAlchemy制作独特的验证器
我所要做的就是使用金字塔、SQLAlchemy创建一个简单的博客网站。我选择的表单模块是Deform,它使用Coland。因此,目前我的表单中有两个字段:name和url。Url通过音译创建名称字段,但它不需要。所以我不想有两篇文章有相同的网址。我想我需要用项圈做验证器。但问题是验证器按字段执行,而不是按模型记录执行。我的意思是,如果我要为url字段创建验证器,我的方法中没有其他字段的信息,例如id或name,因此我无法执行验证 现在,我已经创建了两个小时的字符串=) 实际上,我认为我应该在模型级别上执行这种验证,即在SQLAlchemy模型中,但当然,其他规则不起作用,因为这些规则主要用于生成SQL脚本(创建表):使用Coland和SQLAlchemy制作独特的验证器,sqlalchemy,pyramid,deform,Sqlalchemy,Pyramid,Deform,我所要做的就是使用金字塔、SQLAlchemy创建一个简单的博客网站。我选择的表单模块是Deform,它使用Coland。因此,目前我的表单中有两个字段:name和url。Url通过音译创建名称字段,但它不需要。所以我不想有两篇文章有相同的网址。我想我需要用项圈做验证器。但问题是验证器按字段执行,而不是按模型记录执行。我的意思是,如果我要为url字段创建验证器,我的方法中没有其他字段的信息,例如id或name,因此我无法执行验证 现在,我已经创建了两个小时的字符串=) 实际上,我认为我应该在模型
实际上,我的问题既不涉及Deform也不涉及Colander,这个验证必须在SQLAlchemy级别执行,下面是我的结论:
@validates('url')
def validate_url_unique(self, key, value):
check_unique = DBSession.query(Article)\
.filter(and_(Article.url == value, Article.id != self.id)).first()
if check_unique:
# Doesn't work
raise ValueError('Something went wrong')
# Neither doesn't work
# assert not check_unique
return value
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)
@validates('url')
def validate_url_unique(self, key, value):
check_unique = DBSession.query(Article)\
.filter(and_(Article.url == value, Article.id != self.id)).first()
if check_unique:
# Doesn't work
raise ValueError('Something went wrong')
# Neither doesn't work
# assert not check_unique
return value