diff options
| author | Raphael Collet <rco@openerp.com> | 2014-10-23 09:46:04 +0200 |
|---|---|---|
| committer | Raphael Collet <rco@openerp.com> | 2014-10-23 10:28:13 +0200 |
| commit | ba1369fbef17cee5e61cf37fe00e8fefd22f4256 (patch) | |
| tree | 5f72a8fc299ba70936323686adf837678e7704ff | |
| parent | 0873613767747454b97ce0edc9cb0ce7c7067185 (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.py | 6 |
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 |
