Use string for xxx2Many operator
This commit is contained in:
1 parent
47381db05c
commit
c0c9fdb9e1
6 files changed
+54
-50
No files matched your search
+33
-29
@@ -13,13 +13,13 @@
|
||||
|
||||
Relationals fields
|
||||
|
||||
Values: (0, 0, { fields }) create
|
||||
(1, ID, { fields }) modification
|
||||
(2, ID) remove (delete)
|
||||
(3, ID) unlink one (target id or target of relation)
|
||||
(4, ID) link
|
||||
(5, ID) unlink all (only valid for one2many)
|
||||
(6, ?, ids) set a list of links
|
||||
Values: ('create', { fields }) create
|
||||
('write', ID, { fields }) modification
|
||||
('unlink', ID) remove (delete)
|
||||
('remove', ID) unlink one (target id or target of relation)
|
||||
('add', ID) link
|
||||
('remove_all') unlink all
|
||||
('set', ids) set a list of links
|
||||
"""
|
||||
|
||||
import psycopg2
|
||||
@@ -404,42 +404,44 @@ class One2Many(Column):
|
||||
_table = obj.pool.get(self._obj)._table
|
||||
obj = obj.pool.get(self._obj)
|
||||
for act in values:
|
||||
if act[0] == 0:
|
||||
act[2][self._field] = obj_id
|
||||
obj.create(cursor, user, act[2], context=context)
|
||||
elif act[0] == 1:
|
||||
if act[0] == 'create':
|
||||
act[1][self._field] = obj_id
|
||||
obj.create(cursor, user, act[1], context=context)
|
||||
elif act[0] == 'write':
|
||||
obj.write(cursor, user, [act[1]] , act[2], context=context)
|
||||
elif act[0] == 2:
|
||||
elif act[0] == 'unlink':
|
||||
obj.unlink(cursor, user, [act[1]], context=context)
|
||||
elif act[0] == 3:
|
||||
elif act[0] == 'remove':
|
||||
cursor.execute('UPDATE "' + _table + '" ' \
|
||||
'SET "' + self._field + '" = NULL ' \
|
||||
'WHERE id = %s', (act[1],))
|
||||
elif act[0] == 4:
|
||||
elif act[0] == 'add':
|
||||
cursor.execute('UPDATE "' + _table + '" ' \
|
||||
'SET "' + self._field + '" = %s ' \
|
||||
'WHERE id = %s', (obj_id, act[1]))
|
||||
elif act[0] == 5:
|
||||
elif act[0] == 'remove_all':
|
||||
cursor.execute('UPDATE "' + _table + '" ' \
|
||||
'SET "' + self._field + '" = NULL ' \
|
||||
'WHERE "' + self._field + '" = %s', (obj_id,))
|
||||
elif act[0] == 6:
|
||||
if not act[2]:
|
||||
elif act[0] == 'set':
|
||||
if not act[1]:
|
||||
ids2 = [0]
|
||||
else:
|
||||
ids2 = act[2]
|
||||
ids2 = act[1]
|
||||
cursor.execute('UPDATE "' + _table + '" ' \
|
||||
'SET "' + self._field + '" = NULL ' \
|
||||
'WHERE "' + self._field + '" = %s ' \
|
||||
'AND id not IN (' + \
|
||||
','.join([str(x) for x in ids2]) + ')',
|
||||
(obj_id,))
|
||||
if act[2]:
|
||||
if act[1]:
|
||||
cursor.execute('UPDATE "' + _table + '" ' \
|
||||
'SET "' + self._field + '" = %s ' \
|
||||
'WHERE id IN (' + \
|
||||
','.join([str(x) for x in act[2]]) + ')',
|
||||
','.join([str(x) for x in act[1]]) + ')',
|
||||
(obj_id,))
|
||||
else:
|
||||
raise Exception('Bad arguments')
|
||||
|
||||
one2many = One2Many
|
||||
|
||||
@@ -494,20 +496,20 @@ class Many2Many(Column):
|
||||
return
|
||||
obj = obj.pool.get(self._obj)
|
||||
for act in values:
|
||||
if act[0] == 0:
|
||||
idnew = obj.create(cursor, user, act[2])
|
||||
if act[0] == 'create':
|
||||
idnew = obj.create(cursor, user, act[1])
|
||||
cursor.execute('INSERT INTO "' + self._rel + '" ' \
|
||||
'(' + self._id1 + ', ' + self._id2 + ') ' \
|
||||
'VALUES (%s, %s)', (obj_id, idnew))
|
||||
elif act[0] == 1:
|
||||
elif act[0] == 'write':
|
||||
obj.write(cursor, user, [act[1]] , act[2], context=context)
|
||||
elif act[0] == 2:
|
||||
elif act[0] == 'unlink':
|
||||
obj.unlink(cursor, user, [act[1]], context=context)
|
||||
elif act[0] == 3:
|
||||
elif act[0] == 'remove':
|
||||
cursor.execute('DELETE FROM "' + self._rel + '" ' \
|
||||
'WHERE "' + self._id1 + '" = %s ' \
|
||||
'AND "'+ self._id2 + '" = %s', (obj_id, act[1]))
|
||||
elif act[0] == 4:
|
||||
elif act[0] == 'add':
|
||||
cursor.execute('SELECT * FROM "' + self._rel + '" ' \
|
||||
'WHERE ' + self._id1 + ' = %s ' \
|
||||
'AND ' + self._id2 + ' = %s ',
|
||||
@@ -517,11 +519,11 @@ class Many2Many(Column):
|
||||
cursor.execute('INSERT INTO "' + self._rel + '" ' \
|
||||
'(' + self._id1 + ', ' + self._id2 + ') ' \
|
||||
'VALUES (%s, %s)', (obj_id, act[1]))
|
||||
elif act[0] == 5:
|
||||
elif act[0] == 'remove_all':
|
||||
cursor.execute('UPDATE "' + self._rel + '" ' \
|
||||
'SET "' + self._id2 + '" = NULL ' \
|
||||
'WHERE "' + self._id2 + '" = %s', (obj_id,))
|
||||
elif act[0] == 6:
|
||||
elif act[0] == 'set':
|
||||
domain1, domain2 = obj.pool.get('ir.rule').domain_get(cursor,
|
||||
user, obj._name)
|
||||
if domain1:
|
||||
@@ -536,10 +538,12 @@ class Many2Many(Column):
|
||||
obj._table + '.id ' + domain1 + ')',
|
||||
[obj_id, obj_id] + domain2)
|
||||
|
||||
for act_nbr in act[2]:
|
||||
for act_nbr in act[1]:
|
||||
cursor.execute('INSERT INTO "' + self._rel + '" ' \
|
||||
'(' + self._id1 + ', ' + self._id2 + ') ' \
|
||||
'VALUES (%s, %s)', (obj_id, act_nbr))
|
||||
else:
|
||||
raise Exception('Bad arguments')
|
||||
|
||||
many2many = Many2Many
|
||||
|
||||
|
||||
+8
-8
@@ -890,7 +890,7 @@ class ORM(object):
|
||||
if res_id2:
|
||||
res_id.append(res_id2)
|
||||
if len(res_id):
|
||||
res_id = [(6, 0, res_id)]
|
||||
res_id = [('set', res_id)]
|
||||
else:
|
||||
if '.' in line[i]:
|
||||
module, xml_id = line[i].rsplit('.', 1)
|
||||
@@ -965,7 +965,7 @@ class ORM(object):
|
||||
else:
|
||||
res.append(res3)
|
||||
if len(res):
|
||||
res = [(6, 0, res)]
|
||||
res = [('set', res)]
|
||||
else:
|
||||
res = line[i] or False
|
||||
row[field[len(prefix)]] = res
|
||||
@@ -985,7 +985,7 @@ class ORM(object):
|
||||
warning = warning + warning2
|
||||
reduce(lambda x, y: x and y, newrow)
|
||||
row[field] = (reduce(lambda x, y: x or y, newrow.values()) and \
|
||||
[(0,0,newrow)]) or []
|
||||
[('create', newrow)]) or []
|
||||
i = max2
|
||||
while (position+i)<len(datas):
|
||||
test = True
|
||||
@@ -1002,7 +1002,7 @@ class ORM(object):
|
||||
position + i)
|
||||
warning = warning + warning2
|
||||
if reduce(lambda x, y: x or y, newrow.values()):
|
||||
row[field].append((0, 0, newrow))
|
||||
row[field].append(('create', newrow))
|
||||
i += max2
|
||||
nbrmax = max(nbrmax, i)
|
||||
|
||||
@@ -2350,14 +2350,14 @@ class ORM(object):
|
||||
res = []
|
||||
rel = self.pool.get(fields2[field]['relation'])
|
||||
for rel_id in data[field]:
|
||||
# the lines are first duplicated using the wrong (old)
|
||||
# the lines are first duplicated using the wrong (old)
|
||||
# parent but then are reassigned to the correct one thanks
|
||||
# to the (4, ...)
|
||||
res.append((4, rel.copy(cursor, user, rel_id,
|
||||
# to the ('add', ...)
|
||||
res.append(('add', rel.copy(cursor, user, rel_id,
|
||||
context=context)))
|
||||
data[field] = res
|
||||
elif ftype == 'many2many':
|
||||
data[field] = [(6, 0, data[field])]
|
||||
data[field] = [('set', data[field])]
|
||||
del data['id']
|
||||
for i in self._inherits:
|
||||
del data[self._inherits[i]]
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<field name="name">Admin</field>
|
||||
</record>
|
||||
<record model="ir.ui.menu" id="ir.menu_administration">
|
||||
<field name="groups" eval="[(6, 0, [ref('group_admin')])]"/>
|
||||
<field name="groups" eval="[('add', ref('group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="group_view_form">
|
||||
<field name="model">res.group</field>
|
||||
|
||||
+8
-8
@@ -394,28 +394,28 @@
|
||||
<field name="rule_group" ref="rule_group_action"/>
|
||||
</record>
|
||||
<record model="ir.action.wizard" id="ir.act_module_update_list">
|
||||
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
|
||||
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.ui.menu" id="ir.menu_module_update_list">
|
||||
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
|
||||
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.action.wizard" id="ir.act_module_install_upgrade">
|
||||
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
|
||||
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.ui.menu" id="ir.menu_module_install_upgrade">
|
||||
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
|
||||
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.action.wizard" id="ir.act_translation_update">
|
||||
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
|
||||
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.ui.menu" id="ir.menu_translation_update">
|
||||
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
|
||||
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.action.wizard" id="ir.act_translation_export">
|
||||
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
|
||||
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.ui.menu" id="ir.menu_translation_export">
|
||||
<field name="groups" eval="[(4, ref('res.group_admin'))]"/>
|
||||
<field name="groups" eval="[('add', ref('res.group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="module_view_form">
|
||||
<field name="model">ir.module.module</field>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<field name="signature">Administrator</field>
|
||||
<field name="action" ref="ir.act_module_config_wizard"/>
|
||||
<field name="menu" ref="ir.act_menu_tree"/>
|
||||
<field name="groups" eval="[(4, ref('group_admin'))]"/>
|
||||
<field name="groups" eval="[('add', ref('group_admin'))]"/>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="user_view_form">
|
||||
<field name="model">res.user</field>
|
||||
|
||||
@@ -106,10 +106,10 @@ class MenuitemTagHandler:
|
||||
for group in g_names:
|
||||
if group.startswith('-'):
|
||||
group_id = self.mh.get_id(group[1:])
|
||||
groups_value.append((3, group_id))
|
||||
groups_value.append(('remove', group_id))
|
||||
else:
|
||||
group_id = self.mh.get_id(group)
|
||||
groups_value.append((4, group_id))
|
||||
groups_value.append(('add', group_id))
|
||||
values['groups'] = groups_value
|
||||
|
||||
if not values.get('name'):
|
||||
@@ -199,7 +199,7 @@ class RecordTagHandler:
|
||||
if not answer: return
|
||||
|
||||
if self.model._columns[field_name]._type == 'many2many':
|
||||
self.values[field_name] = [(6, 0, [x['id'] for x in answer])]
|
||||
self.values[field_name] = [('set', [x['id'] for x in answer])]
|
||||
|
||||
elif self.model._columns[field_name]._type == 'many2one':
|
||||
self.values[field_name] = answer[0]['id']
|
||||
|
||||
Reference in new issue
Block a user