web/formfields.py
changeset 4546 f8ac61376b2b
parent 4544 d92aa3221c30
child 4581 c92ded4dee20
equal deleted inserted replaced
4545:9b7b3303c515 4546:f8ac61376b2b
   110     sort = True
   110     sort = True
   111     internationalizable = False
   111     internationalizable = False
   112     fieldset = None
   112     fieldset = None
   113     order = None
   113     order = None
   114     value = _MARKER
   114     value = _MARKER
       
   115     fallback_on_none_attribute = False
   115 
   116 
   116     def __init__(self, name=None, label=_MARKER, widget=None, **kwargs):
   117     def __init__(self, name=None, label=_MARKER, widget=None, **kwargs):
   117         for key, val in kwargs.items():
   118         for key, val in kwargs.items():
   118             if key == 'initial':
   119             if key == 'initial':
   119                 warn('[3.6] use value instead of initial', DeprecationWarning,
   120                 warn('[3.6] use value instead of initial', DeprecationWarning,
   216     def typed_value(self, form, load_bytes=False):
   217     def typed_value(self, form, load_bytes=False):
   217         if self.eidparam and self.role is not None:
   218         if self.eidparam and self.role is not None:
   218             entity = form.edited_entity
   219             entity = form.edited_entity
   219             if form._cw.vreg.schema.rschema(self.name).final:
   220             if form._cw.vreg.schema.rschema(self.name).final:
   220                 if entity.has_eid() or self.name in entity:
   221                 if entity.has_eid() or self.name in entity:
   221                     return getattr(entity, self.name)
   222                     value = getattr(entity, self.name)
       
   223                     if value is not None or not self.fallback_on_none_attribute:
       
   224                         return value
   222             elif entity.has_eid() or entity.relation_cached(self.name, self.role):
   225             elif entity.has_eid() or entity.relation_cached(self.name, self.role):
   223                 return [r[0] for r in entity.related(self.name, self.role)]
   226                 value = [r[0] for r in entity.related(self.name, self.role)]
       
   227                 if value or not self.fallback_on_none_attribute:
       
   228                     return value
   224         return self.initial_typed_value(form, load_bytes)
   229         return self.initial_typed_value(form, load_bytes)
   225 
   230 
   226     def initial_typed_value(self, form, load_bytes):
   231     def initial_typed_value(self, form, load_bytes):
   227         if self.value is not _MARKER:
   232         if self.value is not _MARKER:
   228             if callable(self.value):
   233             if callable(self.value):