One can infer related=True on a non-stored related field if all fields on the
path are related. This cannot be done if the related field is stored: when you
create a record, the database row is created first, and the related field is
computed and stored afterwards. Making the field required in that case would
trigger a non-null constraint violation.
# determine the chain of fields, and make sure they are all set up
recs = env[self.model_name]
# determine the chain of fields, and make sure they are all set up
recs = env[self.model_name]
for name in self.related:
field = recs._fields[name]
field.setup(env)
recs = recs[name]
for name in self.related:
field = recs._fields[name]
field.setup(env)
recs = recs[name]
self.related_field = field
self.related_field = field
if not getattr(self, attr):
setattr(self, attr, getattr(field, prop))
if not getattr(self, attr):
setattr(self, attr, getattr(field, prop))
+ # special case for required: check if all fields are required
+ if not self.store and not self.required:
+ self.required = all(field.required for field in fields)
+
def _compute_related(self, records):
""" Compute the related field `self` on `records`. """
# when related_sudo, bypass access rights checks when reading values
def _compute_related(self, records):
""" Compute the related field `self` on `records`. """
# when related_sudo, bypass access rights checks when reading values