# HG changeset patch # User sylvain.thenault@logilab.fr # Date 1238170183 -3600 # Node ID 62afd820d3ae3c2eead567576b62028fcb5b76b4 # Parent 78e4080252bea3cf9d0f522c2effa06d2bf0c881 field_by_name now takes a "role" argument, override it in AutomaticForm to call guess field if necessary diff -r 78e4080252be -r 62afd820d3ae web/form.py --- a/web/form.py Fri Mar 27 17:08:27 2009 +0100 +++ b/web/form.py Fri Mar 27 17:09:43 2009 +0100 @@ -220,13 +220,13 @@ self.context = None @iclassmethod - def field_by_name(cls_or_self, name): + def field_by_name(cls_or_self, name, role='subject'): if isinstance(cls_or_self, type): fields = cls_or_self._fields_ else: fields = cls_or_self.fields for field in fields: - if field.name == name: + if field.name == name and field.role == role: return field raise Exception('field %s not found' % name) @@ -309,7 +309,7 @@ def form_field_id(self, field): return field.id - def form_field_vocabulary(self, field): + def form_field_vocabulary(self, field, limit=None): raise NotImplementedError def form_buttons(self): diff -r 78e4080252be -r 62afd820d3ae web/views/editforms.py --- a/web/views/editforms.py Fri Mar 27 17:08:27 2009 +0100 +++ b/web/views/editforms.py Fri Mar 27 17:09:43 2009 +0100 @@ -11,6 +11,7 @@ from simplejson import dumps +from logilab.common.decorators import iclassmethod from logilab.mtconverter import html_escape from cubicweb import typed_eid @@ -292,7 +293,20 @@ continue result.append((rschema.display_name(entity.req, role), rschema, role)) return sorted(result) - + + @iclassmethod + def field_by_name(cls_or_self, name, role='subject', eclass=None): + try: + return super(AutomaticEntityForm, cls_or_self, name, role) + except Exception: # XXX should raise more explicit exception + if eclass is None: + raise + field = guess_field(eclass, cls_or_self.schema.rschema(name), role, + eidparam=True) + if field is None: + raise + raise + def __init__(self, *args, **kwargs): super(AutomaticEntityForm, self).__init__(*args, **kwargs)