[ckan-dev] Adding a new field into Organization
Qifeng.Bai at csiro.au
Qifeng.Bai at csiro.au
Tue May 6 23:57:12 UTC 2014
After I added
def is_fallback(self):
return True
def group_types(self):
return ['organization']
It reported an exception and let me set attribute: group_form, I define an attribute:
def group_form(self):
return 'organization/new_organization_form.html'
It gave another error:
dule ckan.controllers.group:463 in new [http://127.0.0.1:5000/_debug/media/plus.jpg] <http://127.0.0.1:5000/organization/new> view<http://127.0.0.1:5000/organization/new>
>> <http://127.0.0.1:5000/organization/new> return render(self._new_template(group_type))
Module ckan.lib.base:224 in render [http://127.0.0.1:5000/_debug/media/plus.jpg] <http://127.0.0.1:5000/organization/new> view<http://127.0.0.1:5000/organization/new>
>> <http://127.0.0.1:5000/organization/new> loader_class=loader_class)
Module pylons.templating:249 in cached_template [http://127.0.0.1:5000/_debug/media/plus.jpg] <http://127.0.0.1:5000/organization/new> view<http://127.0.0.1:5000/organization/new>
>> <http://127.0.0.1:5000/organization/new> return render_func()
Module ckan.lib.base:129 in render_template [http://127.0.0.1:5000/_debug/media/plus.jpg] <http://127.0.0.1:5000/organization/new> view<http://127.0.0.1:5000/organization/new>
>> <http://127.0.0.1:5000/organization/new> template_path, template_type = render_.template_info(template_name)
Module ckan.lib.render:49 in template_info [http://127.0.0.1:5000/_debug/media/plus.jpg] <http://127.0.0.1:5000/organization/new> view<http://127.0.0.1:5000/organization/new>
>> <http://127.0.0.1:5000/organization/new> template_path = find_template(template_name)
Module ckan.lib.render:17 in find_template [http://127.0.0.1:5000/_debug/media/plus.jpg] <http://127.0.0.1:5000/organization/new> view<http://127.0.0.1:5000/organization/new>
>> <http://127.0.0.1:5000/organization/new> if os.path.exists(os.path.join(path, template_name.encode('utf-8'))):
AttributeError: 'NoneType' object has no attribute 'encode'
I copy my code below, Can you tell me what wrong in my code, please?
import logging
import ckan.plugins as plugins
import ckan.plugins.toolkit as tk
class NlmpProjectFormPlugin(plugins.SingletonPlugin):
plugins.implements(plugins.IConfigurer, inherit=True)
plugins.implements(plugins.IGroupForm, inherit=True)
# These record how many times methods that this plugin's methods are
# called, for testing purposes.
num_times_new_template_called = 0
num_times_read_template_called = 0
num_times_edit_template_called = 0
num_times_search_template_called = 0
num_times_history_template_called = 0
num_times_package_form_called = 0
num_times_check_data_dict_called = 0
num_times_setup_template_variables_called = 0
def update_config(self, config):
# Add this plugin's templates dir to CKAN's extra_template_paths, so
# that CKAN will use this plugin's custom templates.
tk.add_template_directory(config, 'templates')
def is_fallback(self):
# Return True to register this plugin as the default handler for
# package types not handled by any other IDatasetForm plugin.
return True
def group_form(self):
return 'organization/new_organization_form.html'
def group_types(self):
# This plugin doesn't handle any special package types, it just
# registers itself as the default (above).
return ['organization']
def form_to_db_schema(self):
schema=group_form_schema()
schema.update({
'project_leader': [ignore_missing, unicode, convert_to_extras]
})
return schema
def db_to_form_schema(self):
return {}
# These methods just record how many times they're called, for testing
# purposes.
# TODO: It might be better to test that custom templates returned by
# these methods are actually used, not just that the methods get
# called.
def setup_template_variables(self, context, data_dict):
NlmpProjectFormPlugin.num_times_setup_template_variables_called += 1
return super(NlmpProjectFormPlugin, self).setup_template_variables(
context, data_dict)
def new_template(self):
NlmpProjectFormPlugin.num_times_new_template_called += 1
return super(NlmpProjectFormPlugin, self).new_template()
def read_template(self):
NlmpProjectFormPlugin.num_times_read_template_called += 1
return super(NlmpProjectFormPlugin, self).read_template()
def edit_template(self):
NlmpProjectFormPlugin.num_times_edit_template_called += 1
return super(NlmpProjectFormPlugin, self).edit_template()
def search_template(self):
NlmpProjectFormPlugin.num_times_search_template_called += 1
return super(NlmpProjectFormPlugin, self).search_template()
def history_template(self):
NlmpProjectFormPlugin.num_times_history_template_called += 1
return super(NlmpProjectFormPlugin, self).history_template()
def package_form(self):
NlmpProjectFormPlugin.num_times_package_form_called += 1
return super(NlmpProjectFormPlugin, self).package_form()
# check_data_dict() is deprecated, this method is only here to test that
# legacy support for the deprecated method works.
def check_data_dict(self, data_dict, schema=None):
NlmpProjectFormPlugin.num_times_check_data_dict_called += 1
From: ckan-dev [mailto:ckan-dev-bounces at lists.okfn.org] On Behalf Of Nigel Babu
Sent: Tuesday, 6 May 2014 8:50 PM
To: CKAN Development Discussions
Subject: Re: [ckan-dev] Adding a new field into Organization
I think you'll also need to add
def is_fallback(self):
return True
def group_types(self):
return ['organization']
Nigel Babu
Developer, Open Knowledge
On 6 May 2014 11:15, <Qifeng.Bai at csiro.au<mailto:Qifeng.Bai at csiro.au>> wrote:
Hi, there
I have tried the example of adding fields to IDatasetField. This example works well. Also I have read the ExampleGroupForm @ https://github.com/okfn/ckanext-example/blob/master/ckanext/example/forms.py
What I need to do is to add “Leader” field into the organisation. I managed to extend the “new_organization_form.html” to create a field called ”project_leader”. Unfortunately, the value of this field was not saved.
Code in new_organization_form.html
{% block custom_fields %}
{{ form.input('project_leader', label=_('Project Leader'), id='field-project_leader', placeholder=_('Leader'), value=data.project_leader, error=errors.project_leader, classes=['control-medium']) }}
{% if action == "edit" %}{{ super() }}{% endif %}
{% endblock %}
Code in the “form_to_db_schema”
def form_to_db_schema(self):
schema=group_form_schema()
schema.update({
'project_leader': [ignore_missing, unicode, convert_to_extras]
})
return schema
Would you please tell me what’s wrong with my code?
Cheers
[cid:image001.gif at 01CC55BF.85E7FEB0]
Qifeng Bai
Software Engineer
CSIRO Land and Water
Black Mountain, Canberra
Ph: +61-2-62465704
Web: www.clw.csiro.au<http://www.clw.csiro.au>
_______________________________________________
ckan-dev mailing list
ckan-dev at lists.okfn.org<mailto:ckan-dev at lists.okfn.org>
https://lists.okfn.org/mailman/listinfo/ckan-dev
Unsubscribe: https://lists.okfn.org/mailman/options/ckan-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.okfn.org/pipermail/ckan-dev/attachments/20140506/26ac0fb9/attachment-0003.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image002.jpg
Type: image/jpeg
Size: 361 bytes
Desc: image002.jpg
URL: <http://lists.okfn.org/pipermail/ckan-dev/attachments/20140506/26ac0fb9/attachment-0003.jpg>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image003.gif
Type: image/gif
Size: 2094 bytes
Desc: image003.gif
URL: <http://lists.okfn.org/pipermail/ckan-dev/attachments/20140506/26ac0fb9/attachment-0003.gif>
More information about the ckan-dev
mailing list