changeset ea8dd19e5913 in tryton:default
details: https://hg.tryton.org/tryton?cmd=changeset;node=ea8dd19e5913
description:
        Add domain inversion for reference fields

        issue7877
        review45831002
diffstat:

 CHANGELOG                         |   1 +
 tryton/common/domain_inversion.py |  23 +++++++++++++++++------
 2 files changed, 18 insertions(+), 6 deletions(-)

diffs (55 lines):

diff -r 5fc576fc54a2 -r ea8dd19e5913 CHANGELOG
--- a/CHANGELOG Wed Apr 10 10:26:40 2019 +0200
+++ b/CHANGELOG Sun Apr 14 14:18:03 2019 +0200
@@ -1,3 +1,4 @@
+* Add domain inversion for reference fields
 * Add list-form view
 * Remove support for Python 3.4
 * Replace ColorSelectionDialog by ColorChooserDialog
diff -r 5fc576fc54a2 -r ea8dd19e5913 tryton/common/domain_inversion.py
--- a/tryton/common/domain_inversion.py Wed Apr 10 10:26:40 2019 +0200
+++ b/tryton/common/domain_inversion.py Sun Apr 14 14:18:03 2019 +0200
@@ -281,12 +281,18 @@
 def unique_value(domain):
     "Return if unique, the field and the value"
     if (isinstance(domain, list)
-            and len(domain) == 1
-            and '.' not in domain[0][0]
-            and domain[0][1] == '='):
-        return True, domain[0][1], domain[0][2]
-    else:
-        return False, None, None
+            and len(domain) == 1):
+        domain, = domain
+        name = domain[0]
+        value = domain[2]
+        count = 0
+        if len(domain) == 4 and name[-3:] == '.id':
+            count = 1
+            model = domain[3]
+            value = [model, value]
+        if name.count('.') == count and domain[1] == '=':
+            return True, domain[1], value
+    return False, None, None
 
 
 def parse(domain):
@@ -586,6 +592,10 @@
     assert unique_value(domain)[0] is False
     domain = [['a.b', '=', 1]]
     assert unique_value(domain)[0] is False
+    domain = [['a.id', '=', 1, 'model']]
+    assert unique_value(domain) == (True, '=', ['model', 1])
+    domain = [['a.b.id', '=', 1, 'model']]
+    assert unique_value(domain) == (False, None, None)
 
 
 def test_evaldomain():
@@ -803,6 +813,7 @@
     test_oror_inversion()
     test_parse()
     test_simplify()
+    test_unique_value()
     test_evaldomain()
     test_localize()
     test_prepare_reference_domain()

Reply via email to