summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphael Collet <rco@openerp.com>2014-10-23 09:46:04 +0200
committerRaphael Collet <rco@openerp.com>2014-10-23 10:28:13 +0200
commitba1369fbef17cee5e61cf37fe00e8fefd22f4256 (patch)
tree5f72a8fc299ba70936323686adf837678e7704ff
parent0873613767747454b97ce0edc9cb0ce7c7067185 (diff)
[IMP] fields: infer required=True on related fields
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.
-rw-r--r--openerp/fields.py6
1 files changed, 6 insertions, 0 deletions
diff --git a/openerp/fields.py b/openerp/fields.py
index 7852c0d8ff2..dc3bfc408cc 100644
--- a/openerp/fields.py
+++ b/openerp/fields.py
@@ -428,10 +428,12 @@ class Field(object):
# determine the chain of fields, and make sure they are all set up
recs = env[self.model_name]
+ fields = []
for name in self.related:
field = recs._fields[name]
field.setup(env)
recs = recs[name]
+ fields.append(field)
self.related_field = field
@@ -452,6 +454,10 @@ class Field(object):
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