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): |