details:   https://code.tryton.org/tryton/commit/378a156b6625
branch:    default
user:      Cédric Krier <[email protected]>
date:      Wed Feb 25 09:08:24 2026 +0100
description:
        Define Function field with column_ as searchable and sortable
diffstat:

 trytond/trytond/model/fields/function.py     |  8 ++++++--
 trytond/trytond/tests/test_field_function.py |  2 ++
 2 files changed, 8 insertions(+), 2 deletions(-)

diffs (39 lines):

diff -r 80db193bd3ac -r 378a156b6625 trytond/trytond/model/fields/function.py
--- a/trytond/trytond/model/fields/function.py  Tue Feb 24 11:35:00 2026 +0100
+++ b/trytond/trytond/model/fields/function.py  Wed Feb 25 09:08:24 2026 +0100
@@ -240,10 +240,14 @@
 
     def searchable(self, model):
         return super().searchable(model) and (
-            bool(self.searcher) or hasattr(model, f'domain_{self.name}'))
+            bool(self.searcher)
+            or hasattr(model, f'domain_{self.name}')
+            or hasattr(model, f'column_{self.name}'))
 
     def sortable(self, model):
-        return super().sortable(model) and hasattr(model, f'order_{self.name}')
+        return super().sortable(model) and (
+            hasattr(model, f'order_{self.name}')
+            or hasattr(model, f'column_{self.name}'))
 
     def getter_multiple(self, method):
         "Returns True if getter function accepts multiple fields"
diff -r 80db193bd3ac -r 378a156b6625 
trytond/trytond/tests/test_field_function.py
--- a/trytond/trytond/tests/test_field_function.py      Tue Feb 24 11:35:00 
2026 +0100
+++ b/trytond/trytond/tests/test_field_function.py      Wed Feb 25 09:08:24 
2026 +0100
@@ -158,6 +158,7 @@
 
         result = Model.search([('value_inc', '=', 43)])
         self.assertEqual(result, [record])
+        self.assertTrue(Model.value_inc.searchable(Model))
 
     @with_transaction()
     def test_no_getter_order(self):
@@ -174,6 +175,7 @@
 
         self.assertEqual(asc, sorted(asc))
         self.assertEqual(desc, sorted(asc, reverse=True))
+        self.assertTrue(Model.value_inc.sortable(Model))
 
     @with_transaction()
     def test_no_getter_relation(self):

Reply via email to