20 from cubicweb.rtags import RelationTags |
20 from cubicweb.rtags import RelationTags |
21 from cubicweb.utils import make_uid |
21 from cubicweb.utils import make_uid |
22 from cubicweb.view import EntityView |
22 from cubicweb.view import EntityView |
23 from cubicweb.common import tags |
23 from cubicweb.common import tags |
24 from cubicweb.web import INTERNAL_FIELD_VALUE, stdmsgs, formwidgets |
24 from cubicweb.web import INTERNAL_FIELD_VALUE, stdmsgs, formwidgets |
25 from cubicweb.web.form import CompositeForm, EntityFieldsForm, FormMixIn |
25 from cubicweb.web.form import (FieldNotFound, CompositeForm, EntityFieldsForm, |
|
26 FormMixIn) |
26 from cubicweb.web.formfields import guess_field |
27 from cubicweb.web.formfields import guess_field |
27 from cubicweb.web.formrenderers import (FormRenderer, EntityFormRenderer, |
28 from cubicweb.web.formrenderers import (FormRenderer, EntityFormRenderer, |
28 EntityCompositeFormRenderer, |
29 EntityCompositeFormRenderer, |
29 EntityInlinedFormRenderer) |
30 EntityInlinedFormRenderer) |
30 _ = unicode |
31 _ = unicode |
294 result.append((rschema.display_name(entity.req, role), rschema, role)) |
295 result.append((rschema.display_name(entity.req, role), rschema, role)) |
295 return sorted(result) |
296 return sorted(result) |
296 |
297 |
297 @iclassmethod |
298 @iclassmethod |
298 def field_by_name(cls_or_self, name, role='subject', eclass=None): |
299 def field_by_name(cls_or_self, name, role='subject', eclass=None): |
|
300 """return field with the given name and role. If field is not explicitly |
|
301 defined for the form but `eclass` is specified, guess_field will be |
|
302 called. |
|
303 """ |
299 try: |
304 try: |
300 return super(AutomaticEntityForm, cls_or_self).field_by_name(name, role) |
305 return super(AutomaticEntityForm, cls_or_self).field_by_name(name, role) |
301 except Exception: # XXX should raise more explicit exception |
306 except FieldNotFound: # XXX should raise more explicit exception |
302 if eclass is None: |
307 if eclass is None: |
303 raise |
308 raise |
304 field = guess_field(eclass, cls_or_self.schema.rschema(name), role, |
309 field = guess_field(eclass, cls_or_self.schema.rschema(name), role, |
305 eidparam=True) |
310 eidparam=True) |
306 if field is None: |
311 if field is None: |
307 raise |
312 raise |
308 raise |
313 return field |
309 |
|
310 |
314 |
311 def __init__(self, *args, **kwargs): |
315 def __init__(self, *args, **kwargs): |
312 super(AutomaticEntityForm, self).__init__(*args, **kwargs) |
316 super(AutomaticEntityForm, self).__init__(*args, **kwargs) |
313 if self.edited_entity.has_eid(): |
317 if self.edited_entity.has_eid(): |
314 self.edited_entity.complete() |
318 self.edited_entity.complete() |