ckanext-scheming
ckanext-scheming copied to clipboard
Feature Request: select/multiple_select autocomplete
Currently, autocomplete is supported with the tag_string_autocomplete and resource_format_autocomplete presets.
It'd be awesome if scheming can also implement autocomplete for select and multiple_select presets.
Here is a possible solution I tried (even if it would be nice to have something like this included in ckanext-scheming)
views.py:
from flask import Blueprint, jsonify
import ckan.plugins.toolkit as toolkit
scheming = Blueprint("scheming", __name__)
@scheming.route('/scheming/api/util/<field>/autocomplete')
def autocomplete(field):
results = []
value = toolkit.request.params.get('incomplete')
if field == "myfield":
for item in "my custom tags".split():
if value in item:
results.append({'Name': item})
# ...
return jsonify({"ResultSet": {"Result": results}})
plugin.py:
import ckan.plugins as plugins
from ckanext.myplugin.views import scheming
# ...
class MyPlugin(plugins.SingletonPlugin):
plugins.implements(plugins.IBlueprint)
# ...
# IBlueprint
def get_blueprint(self):
return [scheming]
customschema.json:
...
{
"field_name": "myfield",
"label": "My field",
"preset": "tag_string_autocomplete",
"form_attrs": {
"data-module": "autocomplete",
"data-module-tags": "",
"data-module-source": "/scheming/api/util/myfield/autocomplete?incomplete=?",
"class": ""
}
},
...
You can also use "data-module-createtags": "false" to prevent custom input.