--- a/web/formfields.py Sun Nov 08 21:53:18 2009 +0100
+++ b/web/formfields.py Fri Nov 20 19:35:54 2009 +0100
@@ -81,6 +81,8 @@
role of the entity in the relation (eg 'subject' or 'object')
:fieldset:
optional fieldset to which this field belongs to
+ :order:
+ key used by automatic forms to sort fields
"""
# default widget associated to this class of fields. May be overriden per
@@ -94,7 +96,7 @@
def __init__(self, name=None, id=None, label=None, help=None,
widget=None, required=False, initial=None,
choices=None, sort=True, internationalizable=False,
- eidparam=False, role='subject', fieldset=None):
+ eidparam=False, role='subject', fieldset=None, order=None):
self.name = name
self.id = id or name
self.label = label or name
@@ -108,6 +110,7 @@
self.role = role
self.fieldset = fieldset
self.init_widget(widget)
+ self.order = order
# ordering number for this field instance
self.creation_rank = Field.__creation_rank
Field.__creation_rank += 1
@@ -178,12 +181,7 @@
renderer
"""
widget = self.get_widget(form)
- try:
- return widget.render(form, self, renderer)
- except TypeError:
- warn('[3.3] %s: widget.render now take the renderer as third argument, '
- 'please update implementation' % widget, DeprecationWarning)
- return widget.render(form, self)
+ return widget.render(form, self, renderer)
def vocabulary(self, form):
"""return vocabulary for this field. This method will be called by
@@ -203,7 +201,10 @@
else:
vocab = form.form_field_vocabulary(self)
if self.internationalizable:
- vocab = [(form._cw._(label), value) for label, value in vocab]
+ # the short-cirtcuit 'and' boolean operator is used here to permit
+ # a valid empty string in vocabulary without attempting to translate
+ # it by gettext (which can lead to weird strings display)
+ vocab = [(label and form._cw._(label), value) for label, value in vocab]
if self.sort:
vocab = vocab_sort(vocab)
return vocab