2014-09-26 3 views
3

Я шел через документацию здесь, чтобы добавить некоторые дополнительные поля для наборов данных и ресурсов в CKAN:Добавление дополнительных полей CKAN ресурсов

http://docs.ckan.org/en/latest/extensions/adding-custom-fields.html

До сих пор все работает, насколько " очистка кода ", и мое дополнительное поле появляется при редактировании набора данных. Я пропустил теги и перешел к добавлению настраиваемых полей к ресурсам, но нет никаких признаков добавления к ним настраиваемого поля. Вот соответствующая часть файла plugin.py:

class ExampleIDatasetFormPlugin(p.SingletonPlugin, tk.DefaultDatasetForm): 
    p.implements(p.IDatasetForm) 
    p.implements(p.IConfigurer) 

    def _modify_package_schema(self, schema): 
    schema.update({ 
     'my_custom_field': [tk.get_validator('ignore_missing'), 
          tk.get_converter('convert_to_extras')] 
    }) 
    schema['resources'].update({ 
     'my_custom_field' : [ tk.get_validator('ignore_missing')] 
    }) 
    return schema 

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

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

    def show_package_schema(self): 
    schema = super(ExampleIDatasetFormPlugin, self).show_package_schema() 
    schema.update({ 
     'my_custom_field': [tk.get_converter('convert_from_extras'), 
          tk.get_validator('ignore_missing')] 
    }) 
    schema['resources'].update({ 
     'my_custom_field' : [ tk.get_validator('ignore_missing') ] 
    }) 
    return schema 

Может кто-нибудь предположить, что может быть не так?

ответ

4

В этом учебнике плагин.py приведен в правильном порядке, но вам также нужно добавить .html-файл с именем «resource_form.html» в папку «templates/snippets /». Добавление следующий код в файл resource_form.html:

{% ckan_extends %} 

{% block basic_fields_url %} 
{{ super() }} 

    {{ form.input('custom_resource_text', label=_('Custom Text'), id='field-custom_resource_text', placeholder=_('custom resource text'), value=data.custom_resource_text, error=errors.custom_resource_text, classes=['control-medium']) }} 
{% endblock %} 

Учебник забыл об этом говорить, но если вы обратитесь к исходному коду в Github (https://github.com/ckan/ckan/tree/master/ckanext/example_idatasetform/templates/package/snippets), вы можете найти то, что я говорю здесь!

+0

Это поле появилось в форме ввода - спасибо. Теперь мне нужно выяснить, как убедить CKAN фактически сохранить новое поле и показать его в сводке ресурсов ... – knirirr

+0

Этот ответ может быть немного устаревшим на данный момент, но я должен указать, что я также необходимо создать resource_form_edit.html в фрагментах с тем же содержимым, чтобы включить добавление настраиваемого поля в уже существующие ресурсы. – scuerda

1

Вы используете одно и то же имя для своего пользовательского поля ресурсов в качестве своего дополнительного (на уровне пакета), хотя они будут полностью различны. Вы не ожидаете, что это значение будет доступно вам? Если нет, как вы заполняете my_custom_field в ресурсах, используете ли вы API или настраиваете ли вы форму? Если он каким-то образом не заселен, он будет спокойно проигнорирован.

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