Add order on xxx2Many fields
This commit is contained in:
1 parent
d3ca007120
commit
ebe610a4ea
1 file changed
+11
-5
+11
-5
@@ -371,11 +371,13 @@ class One2Many(Column):
|
||||
_classic_write = False
|
||||
_type = 'one2many'
|
||||
|
||||
def __init__(self, obj, field, string='unknown', limit=None, **args):
|
||||
def __init__(self, obj, field, string='unknown', limit=None, order=None,
|
||||
**args):
|
||||
Column.__init__(self, string=string, **args)
|
||||
self._obj = obj
|
||||
self._field = field
|
||||
self._limit = limit
|
||||
self._order = order
|
||||
#one2many can't be used as condition for defaults
|
||||
assert(self.change_default != True)
|
||||
|
||||
@@ -389,7 +391,8 @@ class One2Many(Column):
|
||||
for i in range((len(ids) / ID_MAX) + ((len(ids) % ID_MAX) and 1 or 0)):
|
||||
sub_ids = ids[ID_MAX * i:ID_MAX * (i + 1)]
|
||||
ids2 += obj.pool.get(self._obj).search(cursor, user,
|
||||
[(self._field, 'in', sub_ids)], context=context)
|
||||
[(self._field, 'in', sub_ids)], order=self._order,
|
||||
context=context)
|
||||
if self._limit and len(ids2) > offset + self._limit:
|
||||
break
|
||||
if offset:
|
||||
@@ -455,13 +458,14 @@ class Many2Many(Column):
|
||||
_type = 'many2many'
|
||||
|
||||
def __init__(self, obj, rel, id1, id2, string='unknown', limit=None,
|
||||
**args):
|
||||
order=None, **args):
|
||||
Column.__init__(self, string=string, **args)
|
||||
self._obj = obj
|
||||
self._rel = rel
|
||||
self._id1 = id1
|
||||
self._id2 = id2
|
||||
self._limit = limit
|
||||
self._order = order
|
||||
|
||||
def get(self, cursor, obj, ids, name, user=None, offset=0, context=None,
|
||||
values=None):
|
||||
@@ -481,6 +485,7 @@ class Many2Many(Column):
|
||||
if domain1:
|
||||
domain1 = ' and '+domain1
|
||||
|
||||
#TODO fix order: can have many fields
|
||||
cursor.execute('SELECT ' + self._rel + '.' + self._id2 + ', ' + \
|
||||
self._rel + '.' + self._id1 + ' ' \
|
||||
'FROM "' + self._rel + '" , "' + obj._table + '" ' \
|
||||
@@ -488,8 +493,9 @@ class Many2Many(Column):
|
||||
self._rel + '.' + self._id1 + ' IN (' + ids_s + ') ' \
|
||||
'AND ' + self._rel + '.' + self._id2 + ' = ' + \
|
||||
obj._table + '.id ' + domain1 + \
|
||||
limit_str + ' ORDER BY ' + obj._table + '.' + obj._order + \
|
||||
' offset %s', domain2 + [offset])
|
||||
limit_str + ' ORDER BY ' + obj._table + '.' + \
|
||||
(self._order or obj._order) + \
|
||||
' OFFSET %s', domain2 + [offset])
|
||||
for i in cursor.fetchall():
|
||||
res[i[1]].append(i[0])
|
||||
return res
|
||||
|
||||
Reference in new issue
Block a user