Use dict for _order on ORM object.
_order is now an instanciate variable.
It is a dict like this:
[('name', 'ASC'), ('id', 'ASC')]
This commit is contained in:
1 parent
1e7c557129
commit
8fc4a98304
12 files changed
+81
-27
No files matched your search
@@ -303,7 +303,10 @@ class ActionActWindowView(OSV):
|
||||
multi = fields.Boolean('On multiple doc.',
|
||||
help="If set to true, the action will not be displayed \n" \
|
||||
"on the right toolbar of a form views.")
|
||||
_order = 'sequence'
|
||||
|
||||
def __init__(self):
|
||||
super(ActionActWindowView, self).__init__()
|
||||
self._order.insert(0, ('sequence', 'ASC'))
|
||||
|
||||
def default_multi(self, cursor, user, context=None):
|
||||
return False
|
||||
|
||||
@@ -37,7 +37,6 @@ class ModelField(OSV):
|
||||
group_name = fields.Char('Group Name', size=128)
|
||||
view_load = fields.Boolean('View Auto-Load')
|
||||
help = fields.Text('Help', translate=True)
|
||||
_order = "id"
|
||||
|
||||
def default_relate(self, cursor, user, context=None):
|
||||
return 0
|
||||
|
||||
@@ -11,6 +11,9 @@ class Category(OSV):
|
||||
'Parent Category', select=1)
|
||||
childs = fields.One2Many('ir.module.category',
|
||||
'parent', 'Parent Category')
|
||||
_order = 'name'
|
||||
|
||||
def __init__(self):
|
||||
super(Category, self).__init__()
|
||||
self._order.insert(0, ('name', 'ASC'))
|
||||
|
||||
Category()
|
||||
@@ -148,7 +148,6 @@ class Module(OSV):
|
||||
license = fields.Selection([('GPL-2', 'GPL-2'),
|
||||
('Other proprietary', 'Other proprietary')], string='License',
|
||||
readonly=True)
|
||||
_order = 'name'
|
||||
|
||||
def __init__(self):
|
||||
super(Module, self).__init__()
|
||||
@@ -156,6 +155,7 @@ class Module(OSV):
|
||||
('name_uniq', 'unique (name)',
|
||||
'The name of the module must be unique!'),
|
||||
]
|
||||
self._order.insert(0, ('name', 'ASC'))
|
||||
|
||||
def default_state(self, cursor, user, context=None):
|
||||
return 'uninstalled'
|
||||
@@ -461,7 +461,10 @@ class ModuleConfigWizardItem(OSV):
|
||||
('open', 'Open'),
|
||||
('done', 'Done'),
|
||||
], string='State', required=True)
|
||||
_order = 'sequence'
|
||||
|
||||
def __init__(self):
|
||||
super(ModuleConfigWizardItem, self).__init__()
|
||||
self._order.insert(0, ('sequence', 'ASC'))
|
||||
|
||||
def default_state(self, cursor, user, context=None):
|
||||
return 'open'
|
||||
|
||||
+5
-1
@@ -20,7 +20,11 @@ class RuleGroup(OSV):
|
||||
'rule_group_id', 'group_id', 'Groups')
|
||||
users = fields.Many2Many('res.user', 'user_rule_group_rel',
|
||||
'rule_group_id', 'user_id', 'Users')
|
||||
_order = 'model, global_p DESC'
|
||||
|
||||
def __init__(self):
|
||||
super(RuleGroup, self).__init__()
|
||||
self._order.insert(0, ('model', 'ASC'))
|
||||
self._order.insert(1, ('global_p', 'DESC'))
|
||||
|
||||
def default_global_p(self, cursor, user, context=None):
|
||||
return 1
|
||||
|
||||
@@ -388,7 +388,12 @@ class Translation(OSV, Cacheable):
|
||||
translation_ids = self.search(cursor, user, [
|
||||
('lang', '=', lang),
|
||||
('module', '=', module),
|
||||
], order="type, name, src, res_id", context=context)
|
||||
], order=[
|
||||
('type', 'ASC'),
|
||||
('name', 'ASC'),
|
||||
('src', 'ASC'),
|
||||
('res_id', 'ASC'),
|
||||
], context=context)
|
||||
for translation in self.browse(cursor, user, translation_ids,
|
||||
context=context):
|
||||
row = []
|
||||
|
||||
@@ -124,7 +124,10 @@ class UIMenu(OSV):
|
||||
('ir.action.wizard', 'ir.action.wizard'),
|
||||
('ir.action.url', 'ir.action.url'),
|
||||
])
|
||||
_order = "sequence, id"
|
||||
|
||||
def __init__(self):
|
||||
super(UIMenu, self).__init__()
|
||||
self._order.insert(0, ('sequence', 'ASC'))
|
||||
|
||||
def default_icon(self, cursor, user, context=None):
|
||||
return 'STOCK_OPEN'
|
||||
|
||||
@@ -24,13 +24,13 @@ class View(OSV):
|
||||
inherit = fields.Many2One('ir.ui.view', 'Inherited View')
|
||||
field_childs = fields.Char('Childs Field',size=64)
|
||||
module = fields.Char('Module', size=128, readonly=True)
|
||||
_order = "priority"
|
||||
|
||||
def __init__(self):
|
||||
super(View, self).__init__()
|
||||
self._constraints += [
|
||||
('check_xml', 'Invalid XML for View Architecture!', ['arch'])
|
||||
]
|
||||
self._order.insert(0, ('priority', 'ASC'))
|
||||
|
||||
def default_arch(self, cursor, user, context=None):
|
||||
return '<?xml version="1.0"?>'
|
||||
@@ -203,11 +203,11 @@ class ViewShortcut(OSV):
|
||||
user_id = fields.Many2One('res.user', 'User Ref.', required=True,
|
||||
ondelete='cascade')
|
||||
resource = fields.Char('Resource Name', size=64, required=True)
|
||||
_order = 'sequence'
|
||||
|
||||
def __init__(self):
|
||||
super(ViewShortcut, self).__init__()
|
||||
self._rpc_allowed.append('get_sc')
|
||||
self._order.insert(0, ('sequence', 'ASC'))
|
||||
|
||||
def get_sc(self, cursor, user, user_id, model='ir.ui.menu', context=None):
|
||||
"Provide user's shortcuts"
|
||||
|
||||
@@ -494,8 +494,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 + '.' + \
|
||||
(self._order or obj._order) + \
|
||||
limit_str + ' ORDER BY ' + \
|
||||
','.join([obj._table + '.' + x[0] + ' ' + x[1] \
|
||||
for x in (self._order or obj._order)]) + \
|
||||
' OFFSET %s', domain2 + [offset])
|
||||
for i in cursor.fetchall():
|
||||
res[i[1]].append(i[0])
|
||||
|
||||
+39
-11
@@ -195,7 +195,7 @@ class ORM(object):
|
||||
_rec_name = 'name'
|
||||
_parent_name = 'parent'
|
||||
_date_name = 'date'
|
||||
_order = 'id'
|
||||
_order = None
|
||||
_inherits = {} #XXX remove from class instance
|
||||
_sequence = None
|
||||
_description = ''
|
||||
@@ -730,6 +730,7 @@ class ORM(object):
|
||||
self._sql_constraints = []
|
||||
self._constraints = []
|
||||
self._inherit_fields = []
|
||||
self._order = [('id', 'ASC')]
|
||||
# reinit the cache on _columns and _defaults
|
||||
self.__columns = None
|
||||
self.__defaults = None
|
||||
@@ -752,6 +753,7 @@ class ORM(object):
|
||||
'Last modification by', readonly=True)
|
||||
self.write_date = fields.DateTime(
|
||||
'Last modification date', readonly=True)
|
||||
self.id = fields.Integer('ID', readonly=True)
|
||||
|
||||
for name in self._columns:
|
||||
if isinstance(self._columns[name], (fields.Selection, fields.Reference)) \
|
||||
@@ -1099,7 +1101,9 @@ class ORM(object):
|
||||
' FROM ' + table_query + '\"' + self._table +'\" ' \
|
||||
'WHERE id IN ' \
|
||||
'(' + ','.join([str(x) for x in sub_ids]) + ')'\
|
||||
' AND ' + domain1 + ' ORDER BY ' + self._order),
|
||||
' AND ' + domain1 + ' ORDER BY ' + \
|
||||
','.join([self._table + '.' + x[0] + ' ' + x[1] \
|
||||
for x in self._order])),
|
||||
domain2)
|
||||
if not cursor.rowcount == len({}.fromkeys(sub_ids)):
|
||||
raise ExceptORM('AccessError',
|
||||
@@ -1112,7 +1116,9 @@ class ORM(object):
|
||||
' FROM ' + table_query + '\"' + self._table + '\" ' \
|
||||
'WHERE id IN ' \
|
||||
'(' + ','.join([str(x) for x in sub_ids]) + ')'\
|
||||
' ORDER BY ' + self._order)
|
||||
' ORDER BY ' + \
|
||||
','.join([self._table + '.' + x[0] + ' ' + x[1] \
|
||||
for x in self._order]))
|
||||
res.extend(cursor.dictfetchall())
|
||||
else:
|
||||
res = [{'id': x} for x in ids]
|
||||
@@ -1525,7 +1531,6 @@ class ORM(object):
|
||||
user = user id
|
||||
vals = dictionary of the form {'field_name': field_value, ...}
|
||||
"""
|
||||
|
||||
if self._table_query:
|
||||
return False
|
||||
|
||||
@@ -2042,14 +2047,14 @@ class ORM(object):
|
||||
|
||||
table = self
|
||||
if args[i][0] in self._inherit_fields:
|
||||
table = self.pool.get(self._inherit_fields[args[i][0]][0])
|
||||
itable = self.pool.get(self._inherit_fields[args[i][0]][0])
|
||||
table_query = ''
|
||||
if table._table_query:
|
||||
if itable._table_query:
|
||||
table_query = '(' + self._table_query + ') AS '
|
||||
if (table_query + '"' + table._table + '"' not in tables):
|
||||
tables.append(table_query + '"' + table._table + '"')
|
||||
if (table_query + '"' + itable._table + '"' not in tables):
|
||||
tables.append(table_query + '"' + itable._table + '"')
|
||||
joins.append(('id', 'join', '%s.%s' % \
|
||||
(self._table, self._inherits[table._name]), table))
|
||||
(self._table, self._inherits[itable._name]), itable))
|
||||
fargs = args[i][0].split('.', 1)
|
||||
field = table._columns.get(fargs[0], False)
|
||||
if not field:
|
||||
@@ -2351,8 +2356,31 @@ class ORM(object):
|
||||
qu1 = ' WHERE ' + ' AND '.join(qu1)
|
||||
else:
|
||||
qu1 = ''
|
||||
#XXX should be better if order where smthg like [('name','desc'),('name','asc')]:
|
||||
order_by = order and order.replace(';','\;') or self._order
|
||||
|
||||
order_by = []
|
||||
for field, otype in (order or self._order):
|
||||
if otype.upper() not in ('DESC', 'ASC'):
|
||||
raise ExceptORM('Error', 'Wrong order type (%s)!' % otype)
|
||||
if (field not in self._columns \
|
||||
or not self._columns[field]._classic_write) \
|
||||
and (field not in self._inherit_fields.keys() \
|
||||
or not self._inherit_fields[field][2]._classic_write):
|
||||
raise ExceptORM('Error', 'Wrong field name (%s) in order!' \
|
||||
% field)
|
||||
if field in self._inherit_fields.keys():
|
||||
obj = self.pool.get(self._inherit_fields[field][0])
|
||||
order_by.append(obj._table + '.' + field + ' ' + otype)
|
||||
if '"' + obj._table + '"' not in tables:
|
||||
tables.append('"' + obj._table + '"')
|
||||
if len(qu1):
|
||||
qu1 += ' AND '
|
||||
else:
|
||||
qu1 = ' WHERE '
|
||||
qu1 += ' %s.%s = %s.id' % (self._table,
|
||||
self._inherits[obj._name], obj._table)
|
||||
else:
|
||||
order_by.append(self._table + '.' + field + ' ' + otype)
|
||||
order_by = ','.join(order_by)
|
||||
|
||||
limit_str = limit and (type(limit) in (float, int, long))\
|
||||
and ' LIMIT %d' % limit or ''
|
||||
|
||||
@@ -55,7 +55,6 @@ class Request(OSV):
|
||||
], 'State', required=True, readonly=True)
|
||||
history = fields.One2Many('res.request.history', 'request',
|
||||
'History', readonly=True)
|
||||
_order = 'priority DESC, trigger_date, create_date DESC'
|
||||
|
||||
def default_act_from(self, cursor, user, context=None):
|
||||
return user
|
||||
@@ -77,6 +76,9 @@ class Request(OSV):
|
||||
'request_close',
|
||||
'request_get',
|
||||
]
|
||||
self._order.insert(0, ('priority', 'DESC'))
|
||||
self._order.insert(1, ('trigger_date', 'ASC'))
|
||||
self._order.insert(2, ('create_date', 'DESC'))
|
||||
|
||||
def links_get(self, cursor, user, context=None):
|
||||
request_link_obj = self.pool.get('res.request.link')
|
||||
@@ -144,7 +146,10 @@ class RequestLink(OSV):
|
||||
name = fields.Char('Name', size=64, required=True, translate=True)
|
||||
object = fields.Char('Object', size=64, required=True)
|
||||
priority = fields.Integer('Priority')
|
||||
_order = 'priority'
|
||||
|
||||
def __init__(self):
|
||||
super(RequestLink, self).__init__()
|
||||
self._order.insert(0, ('priority', 'ASC'))
|
||||
|
||||
def default_priority(self, cursor, user, context=None):
|
||||
return 5
|
||||
|
||||
@@ -464,7 +464,7 @@ class TrytondXmlHandler(sax.handler.ContentHandler):
|
||||
# problem when the corresponding recordds will be deleted:
|
||||
module_data_ids = self.modeldata_obj.search(
|
||||
self.cursor, self.user, [('module','=',self.module)],
|
||||
order="id desc",
|
||||
order=[('id', 'DESC')],
|
||||
)
|
||||
return [rec.fs_id for rec in self.modeldata_obj.browse(
|
||||
self.cursor, self.user, module_data_ids)]
|
||||
@@ -632,7 +632,7 @@ def post_import(cursor, module, to_delete):
|
||||
|
||||
mdata_ids = modeldata_obj.search(
|
||||
cursor, user, [('fs_id','in',to_delete)],
|
||||
order="id desc",
|
||||
order=[('id', 'DESC')],
|
||||
)
|
||||
|
||||
for mrec in modeldata_obj.browse(cursor, user, mdata_ids):
|
||||
|
||||
Reference in new issue
Block a user