我一直在阅读这里的文档,为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
有人可以建议可能出现的问题吗?
答案 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还是自定义表单?如果它没有以某种方式填充,它将被悄然忽略。