Из книги:
Обратите внимание, что requires=...
будет обеспечиваться соблюдение на уровне форм, required=True
обеспечивается на уровне DAL (вставки), в то время как notnull
, unique
и ondelete
исполняются на уровня базы данных. Хотя иногда они кажутся избыточными, важно поддерживать различие при программировании с помощью DAL.
unique=True
делает не результат в валидатор создается. Это приводит к ограничению UNIQUE
, добавляемому к схеме базы данных, когда web2py сначала создает таблицу в базе данных (при условии, что вы включили миграции). Если вы вызываете методы DAL .insert()
или .update()
со значениями, которые будут нарушать это ограничение, база данных будет вызывать ошибку (что приведет к исключению Python в вашем приложении).
Установка requires=IS_NOT_IN_DB(...)
создает валидатор, который будет выполняться, когда вы (а) представить форму, созданную с помощью SQLFORM
или (б) называют DAL .validate_and_insert()
или .validate_and_update()
методы. Если проверка не выполняется, вставка/обновление вообще не отправляется в базу данных, и вы не получаете исключение Python, а просто запись об ошибке (которая обычно отображается в форме в случае отправки формы).
Если вы будете делать вставки и обновления через формы, рекомендуется использовать валидатор, поскольку он обеспечивает правильное взаимодействие с пользователем (то есть отображает сообщение об ошибке с формой). Также рекомендуется установить unique=True
, чтобы база данных имела соответствующую схему, если вы вставляете/обновляете средства, отличные от форм (и, возможно, даже вне web2py или DAL).