После некоторых дальнейших исследований и экспериментов я могу ответить на свой вопрос здесь: ключом является реализация IDatasetForm.validate () , которая может использоваться для проверки пакетов способами, выходящими за рамки схемы.обычно используется проверка на основе:
from ckan.common import _
import ckan.plugins.toolkit as toolkit
def validate(self, context, data_dict, schema, action):
# first, run the schema-based validation to get that out of the way:
(data_dict, errors) = toolkit.navl_validate(data_dict, schema, context)
# we're only interested if this is a create or update action:
if action in [ 'package_create', 'package_update' ]:
# now comes the actual validation:
if 'groups' not in data_dict:
errors['groups'] = errors.get('groups', []) + [ _('Required field \'groups\' not set.') ]
else if len(data_dict['groups'] < 1):
errors['groups'] = errors.get('groups', []) + [ _('\'groups\' property has no value.') ]
# we should probably also check if the group exists, etc.
return (data_dict, errors)
Это должно хорошо работать для создания / обновления пакетов через API.Если мы хотим сделать эту работу для создания и обновления через пользовательский интерфейс, мы также должны настроить шаблон пакета, чтобы разрешить установку groups
в основном шаблоне - в противном случае может быть ошибка в основном шаблоне, которую выиграл пользовательне могу исправить.