[FIX] base: correctly handle non-normalised domains in SSF
Turns out I'd kinda skipped that bit. Fixes #22711
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user