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