向CKAN资源添加额外字段

时间:2014-09-26 13:58:48

标签: 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

有人可以建议可能出现的问题吗?

2 个答案:

答案 0 :(得分:4)

本教程中的plugin.py是正确的,但您还需要在“templates / snippets /”文件夹中添加名为“resource_form.html”的.html文件。将以下代码添加到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),你可以在这里找到我在说什么!

答案 1 :(得分:1)

您使用自定义资源字段的相同名称作为自定义额外(在包级别),尽管这些名称完全不同。您不希望这个值被分享吗?如果没有,您如何在资源中填充my_custom_field,是使用API​​还是自定义表单?如果它没有以某种方式填充,它将被悄然忽略。

相关问题