2
我需要为我的扩展CKAN 2.2中的日期定义新的验证器。 IValidators界面不起作用。你能帮我吗?如何在CKAN 2.2中定义自定义验证器
我需要为我的扩展CKAN 2.2中的日期定义新的验证器。 IValidators界面不起作用。你能帮我吗?如何在CKAN 2.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
中都很重要。
验证器的顺序是否影响在表单提交中显示验证错误的顺序?根据我的经验,似乎不是。我试图弄清楚如何使验证错误以与页面上显示的字段(它们是自定义域和默认域的组合)相同的顺序出现。 – littleK 2017-10-05 03:22:03