更改odoo树vi中的默认排序

2024-10-01 15:46:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我把这段代码添加到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变量对我的记录进行排序,所以我将以下代码添加到树中:

^{pr2}$

但它不起作用。列表未排序。排序字段已显示在树状视图中,但我无法单击它手动排序我的记录。在

我编辑了第一行,但是添加了store="true"。但当我测试它时,sort字段是空的。_compute_sort方法不起作用。在


Tags: 代码selfnonefields列表排序记录sort
2条回答

我找到了一个解决方案,我把排序字段改为选择字段:

sort = fields.Selection([('a','a'),
                         ('b','b'),
                         ('c','c'),
                         ('d','d'),
                         ('e','e'),
                         ('f','f'),
                         ('g','g'),], string='Sorting', defaut='g')

我改变了方法并调用了onchange api:

^{pr2}$

现在一切都很好。在

稍微干净一点的解决方案应该是这样的:

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字段,这样更容易读取/比较,并且应该工作得更快。在

Odoo Fields Documentation

相关问题 更多 >

    热门问题