功能:列表视图-显示-行号
第一版:每页行号从1开始
- model.py
class SaleOrderExtension(models.Model):
_inherit = 'sale.order'
# 功能:列表视图-显示-行号
# 定义计算属性,根据行数计算对应的行号
_sequence = fields.Integer(string='Sequence', compute='_compute_row_number', store=False)
# 计算方法
def _compute_row_number(self):
row_number = 1
for record in self:
record._sequence = row_number
row_number += 1
- view.xml
<record model="ir.ui.view" id="view_quotation_tree_display_line_numbers">
<field name="name">view.quotation.tree.display.line.numbers</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_quotation_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="before">
<field name="_sequence" widget="number" readonly="True"/>
</xpath>
</field>
</record>
第二版:翻页后行号根据offset继续增加
- model.py
class SaleOrderExtension(models.Model):
_inherit = 'sale.order'
# 功能:列表视图-显示-行号
# 定义属性,用于存储行号
_sequence = fields.Integer(string='Sequence', store=False)
# from addons.web.models.models import Base 必须注释
class BaseExtension(models.AbstractModel):
_inherit = 'base'
# 重写返回数据的方法
@api.model
def web_search_read(self, domain=None, fields=None, offset=0, limit=None, order=None, count_limit=None):
# 首先调用父类方法 得出正常的返回值
response = super().web_search_read(domain, fields, offset=offset, limit=limit, order=order)
# 创建查询对象-对sale.order进行查询
xx = self.env['sale.order']
if response.get('records'):
n = 0
# 遍历返回值中records下的数据-即行数据
for i in response['records']:
n += 1
# 根据id对数据进行查询,替换_sequence的值
xx.search([('id', '=', i['id'])]).write({'_sequence': offset + n})
# 重新调用父类方法 得出新数据并返回
response2 = super().web_search_read(domain, fields, offset=offset, limit=limit, order=order)
return response2
- view.xml
<!-- 功能:列表视图-显示-行号 -->
<!-- 继承于:sale/views/sale_order_views.xml/view_quotation_tree -->
<record model="ir.ui.view" id="view_quotation_tree_display_line_numbers">
<field name="name">view.quotation.tree.display.line.numbers</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_quotation_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='state']" position="before">
<field name="_sequence" widget="number" readonly="True"/>
</xpath>
</field>
</record>