Hi,
Sometimes, a Function field could be just written as SQL expression and
it is a pity to have to write a getter and searcher.
So the idea will be to have a field that will behaves like a Function
field but you will only have to define the SQL statement.
To have such feature, we will need to redesign the API of field.
For now, field could have a get, set and convert_domain methods.
The get method if defined is called to modify or compute the value.
API: `get(self, ids, Model, name, values=None)`
The set method if defined is called to set the value in create/write
instead of being a UPDATE column.
API: `set(self, Model, name, ids, value, *[ids, value, …])`
The convert_domain is always called when searching on the field.
API: `convert_domain(self, domain, tables, Model)`
The awkward is that the 'set' method presences is used on
`ModelSQL.read` to know if the column must be a column in `SELECT`.
My proposal is to re-use the existing `sql_column` (from changeset
156f1cfee9f2) instead of 'set' method for read.
Then we could change the API of get method: get(self, Model, name, ids)
We will no more need of values because such case could be handle with
sql_column.
So the new field could be:
class FunctionSQL(_Function): #common part with Function
def __init__(self, field, column, setter=None, loading='eager'):
…
def sql_column(self, table, Model):
return getattr(Model, self.column)(table)
# convert_domain should work out of the box
# no get
--
Cédric Krier - B2CK SPRL
Email/Jabber:
cedric...@b2ck.com
Tel:
+32 472 54 46 59
Website:
http://www.b2ck.com/