[FIX] base: correctly handle non-normalised domains in SSF

Turns out I'd kinda skipped that bit.

Fixes #22711
This commit is contained in:
xmo-odoo
2018-02-01 15:24:38 +01:00
committed by GitHub
parent 373eb4bf42
commit c385f5f418
3 changed files with 31 additions and 1 deletions
@@ -91,4 +91,17 @@
</form>
</field>
</record>
<record id="non_normalized_attrs" model="ir.ui.view">
<field name="name">Non Normalised Domains</field>
<field name="model">test_testing_utilities.a</field>
<field name="arch" type="xml">
<form>
<field name="f1"/>
<field name="f2" attrs="{'readonly': [['f1', '=', 63], ['f3', '=', 5]]}"/>
<field name="f3"/>
<field name="f4"/>
</form>
</field>
</record>
</odoo>
@@ -65,6 +65,19 @@ class TestBasic(TransactionCase):
with self.assertRaises(AssertionError):
f.f2 = 42
def test_attrs(self):
""" Checks that attrs/modifiers with non-normalized domains work
"""
f = Form(self.env['test_testing_utilities.a'], view='test_testing_utilities.non_normalized_attrs')
# not readonly yet, should work
f.f2 = 5
# make f2 readonly
f.f1 = 63
f.f3 = 5
with self.assertRaises(AssertionError):
f.f2 = 6
class TestM2O(TransactionCase):
def test_default_and_onchange(self):
""" Checks defaults & onchanges impacting m2o fields
+5 -1
View File
@@ -28,6 +28,7 @@ from decorator import decorator
from lxml import etree, html
from odoo.models import BaseModel
from odoo.osv.expression import normalize_domain
from odoo.tools import pycompat
from odoo.tools.safe_eval import safe_eval
@@ -758,7 +759,10 @@ class Form(object):
contexts = fvg['contexts'] = {}
for f in etree.fromstring(fvg['arch']).iter('field'):
fname = f.get('name')
modifiers[fname] = json.loads(f.get('modifiers', '{}'))
modifiers[fname] = {
modifier: domain if isinstance(domain, bool) else normalize_domain(domain)
for modifier, domain in json.loads(f.get('modifiers', '{}')).items()
}
ctx = f.get('context')
if ctx:
contexts[fname] = ctx