Добавление дополнительных полей в ресурсы 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

Кто-нибудь может подсказать, что может пойти не так?


person knirirr    schedule 26.09.2014    source источник


Ответы (2)


В этом руководстве используется plugin.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), вы можете найти то, что я говорю здесь!

person Wei Xu    schedule 19.05.2015
comment
Это привело к появлению правильного поля в форме ввода - спасибо. Теперь мне нужно решить, как убедить CKAN сохранить новое поле и показать его в сводке ресурсов... - person knirirr; 05.06.2015
comment
Этот ответ может быть немного устаревшим на данный момент, но я должен указать, что мне также нужно было создать resource_form_edit.html во фрагментах с тем же содержимым, чтобы разрешить добавление настраиваемого поля к уже существующим ресурсам. - person scuerda; 13.05.2016

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

person jaybrau    schedule 06.01.2015