2015-01-15 2 views

ответ

2

В настоящее время three different function prototypes доступен для специальных валидаторов. Ниже приведен пример шаблона проверки правильности даты, использующего прототип, который принимает два параметра (вариант 5 в ссылке на документацию). Этот тип должен вернуть конечное значение поля (наоборот, он имеет возможность изменить значение, прежде чем она хранится):

import ckan.plugins as plugins 
import ckan.plugins.toolkit as tk 
from ckan.plugins.toolkit import Invalid 

def date_str_validator(value, context): 
    valid_date = tk.get_validator('isodate')(value, context) 
    if not valid_date or not isinstance(valid_date, datetime.datetime): 
     raise Invalid("Invalid date") 
    return value 

class MyPlugin(plugins.SingletonPlugin, tk.DefaultDatasetForm): 

    plugins.implements(plugins.IDatasetForm, inherit=False) 

    def _modify_package_schema(self, schema): 
     schema.update({ 
      # Custom extras 
      'origination_date':[tk.get_validator('ignore_missing'), 
           date_str_validator, 
           tk.get_converter('convert_to_extras')] 
     }) 
     return schema 

    def create_package_schema(self): 
     schema = super(MyPlugin, self).create_package_schema() 
     schema = self._modify_package_schema(schema) 

     return schema 

    def update_package_schema(self): 
     schema = super(MyPlugin, self).update_package_schema() 
     schema = self._modify_package_schema(schema) 
     return schema 

    def show_package_schema(self): 
     schema = super(MyPlugin, self).show_package_schema() 

     schema.update({ 
      # Custom extras 
      'origination_date':[tk.get_converter('convert_from_extras'), 
           tk.get_validator('ignore_missing'), 
           date_str_validator] 
     }) 

     return schema 

Обратите внимание, что валидаторы и конвертеры называются в порядке, так что порядок показать здесь важно как в _modify_package_schema, так и в show_package_schema.

+0

Оправдывает ли порядок валидаторов порядок, при котором ошибки проверки отображаются в форме submit? По моему опыту, похоже, нет. Я пытаюсь выяснить, как заставить ошибки проверки отображаться в том же порядке, что и поля, отображаемые на странице (которые представляют собой сочетание пользовательских и по умолчанию полей). – littleK

Смежные вопросы