Все, что я пытаюсь сделать, это простой блог-сайт с использованием Pyramid, SQLAlchemy. Выбранным модулем формы является Deform, который использует Coland. Итак, у меня есть два поля в моей форме: имя и url. Url создает путем транслитерации поле имени, но это не так. Поэтому я не хочу иметь две статьи с одинаковыми адресами. Мне нужно как-то сделать валидатор с Коллинзом, я думаю. Но проблема заключается в том, что валидатор выполняет в одном поле, но не в записи модели. Я имею в виду, если бы я сделал валидатор для поля url, у меня нет информации в моем методе о других полях, например id или имя, поэтому я не смог выполнить проверку.Создание уникального валидатора с Coland и SQLAlchemy
Теперь у меня есть там пара строк, которые я создал в течение двух часов =)
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, но правила futher конечно не работают, потому что такие правила существуют в основном для создания сценариев 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)