我将此代码添加到project_issue模块中。我创建了一个优先级列表,我希望我的记录列表不是按字母顺序排序,而是按优先级的重要性排序。所以这是我的代码:
sort = fields.Text(compute='_compute_sort')
ipriority = fields.Selection([('none', 'None'),
('low', 'Low'),
('normal', 'Normal'),
('medium', 'Medium'),
('high', 'High'),
('urgent', 'Urgent'),
('immediate', 'Immediate')
], string='Issue Priority', required=True, default='none')
@api.one
def _compute_sort(self):
if self.ipriority == 'none':
self.sort = 'ggggggg'
elif self.ipriority == 'low':
self.sort = 'fffffff'
elif self.ipriority == 'normal':
self.sort = 'eeeeeee'
elif self.ipriority == 'medium':
self.sort = 'ddddddd'
elif self.ipriority == 'high':
self.sort = 'ccccccc'
elif self.ipriority == 'urgent':
self.sort = 'bbbbbbb'
elif self.ipriority == 'immediate':
self.sort = 'aaaaaaa'
return self.ipriority
现在我希望使用sort变量对记录进行排序,因此我将此代码添加到树中:
<tree string="Issue Tracker Tree" decoration-bf="message_needaction==True" default_order="name">
<field name="sort" invisible="1"/>
</tree>
但它不起作用。该列表未排序。排序字段已在树视图中显示,但我无法单击它以手动排序我的记录。
我编辑了第一行,但添加了store="true"
。但是当我测试它时,排序字段是空的。 _compute_sort
方法不起作用。
答案 0 :(得分:0)
我找到了一个解决方案,我将排序字段更改为选择字段:
sort = fields.Selection([('a','a'),
('b','b'),
('c','c'),
('d','d'),
('e','e'),
('f','f'),
('g','g'),], string='Sorting', defaut='g')
我更改了方法并调用了onchange api:
@api.onchange('ipriority')
def _onchange_sort(self):
if self.ipriority == 'none':
self.sort = 'g'
elif self.ipriority == 'low':
self.sort = 'f'
elif self.ipriority == 'normal':
self.sort = 'e'
elif self.ipriority == 'medium':
self.sort = 'd'
elif self.ipriority == 'high':
self.sort = 'c'
elif self.ipriority == 'urgent':
self.sort = 'b'
elif self.ipriority == 'immediate':
self.sort = 'a'
现在一切正常。
答案 1 :(得分:0)
一个稍微清洁的解决方案是这样的:
sort = fields.Integer(compute='_compute_sort', store=True)
ipriority = fields.Selection([('none', 'None'),
('low', 'Low'),
('normal', 'Normal'),
('medium', 'Medium'),
('high', 'High'),
('urgent', 'Urgent'),
('immediate', 'Immediate')
], string='Issue Priority', required=True, default='none')
@api.multi
@api.depends('ipriority')
def _compute_sort(self):
sort_order = {
'immediate': 1,
'urgent': 2,
'high': 3,
'medium': 4,
'normal': 5,
'low': 6,
'none': 7,
}
for record in self:
record.sort = sort_order.get(record.ipriority)
这将存储您的sort
字段,因此不需要经常重新计算。它还使其成为Integer
字段,而不是Char
,它更易于阅读/比较,并且应该更快。