代码之家  ›  专栏  ›  技术社区  ›  3piece

Odoo v9问题,列未在相关字段上排序

  •  2
  • 3piece  · 技术社区  · 7 年前

    我有一个问题,列在某些相关字段上不可排序。

    我使用以下代码片段扩展了res.partner表单:

    class CrmProject(models.Model):
    
    _name = 'crm.project'
    _inherit = ['mail.thread', 'ir.needaction_mixin']
    _inherits = {
        'res.partner': 'partner_id',
    }
    _order = "name asc"
    
    
    @api.model
    def _get_domain_employee(self):
        ids = self.env.ref('aim_contacts.res_partner_business_2').ids
        return [('business_id', '=', ids)]
        .
        .
    industry_id = fields.Many2one('crm.project.industry', 'Construction Type')
    

    我用以下代码片段扩展了sales/opportunity模块:

    class CrmOpportunity(models.Model):
    _name = 'crm.opportunity'
    _inherit = ['mail.thread', 'ir.needaction_mixin', 'aim.res.common']
    _order = 'name asc'
    
    @api.model
    def _get_domain_employee(self):
        ids = self.env.ref('aim_contacts.res_partner_business_2').ids
        return [('business_id', '=', ids)]
    
    name = fields.Char('Topic', required=True)
        .
        .
    crm_project_id = fields.Many2one('crm.project', 'Project', track_visibility='onchange')
    industry_id = fields.Many2one('crm.project.industry', 'Construction Type',related='crm_project_id.industry_id', readonly=True)
    

    视图定义如下:

    <record id="crm_opportunity_tree_view" model="ir.ui.view">
      <field name="name">crm.opportunity.tree.view</field>
      <field name="model">crm.opportunity</field>
      <field name="arch" type="xml">
        <tree string="Opportunities">
          <field name="name" string="Topic" invisible="1"/>
          <field name="crm_project_id"/>
          <field name="industry_id"/>
        </tree>
      </field>
    </record>
    

    问题1: 加载opportunities页面时,单击“Construction Type”(industry\u id)标题不会执行任何操作。

    问题2: 此外,单击“Project”(crm\u Project\u id)标题时,列将按id而不是名称排序(即使它显示的是名称)。

    我认为问题2可以通过添加crm来解决。项目py:

    _order = "name asc"
    

    但它没有起作用。

    任何帮助都将不胜感激。

    使现代化

    将store=True添加到相关字段的方法有效。但有一个问题是,如果该字段已经创建,那么它将/可能不会使用最新的数据进行更新。

    为了解决这个问题,我创建了另一个与原始字段具有相同信息的字段,然后将其链接到该字段。我读到其他人删除字段并再次创建它们。

    1 回复  |  直到 7 年前
        1
  •  4
  •   forvas    7 年前

    相关字段未存储在数据库中,并且不能按未存储在数据库中的字段排序,因此该部分的解决方案是添加 store=True 至相关字段:

    industry_id = fields.Many2one('crm.project.industry', 'Construction Type',related='crm_project_id.industry_id', readonly=True, store=True)
    

    你的 项目 字段应正常工作,是否已在的树状图中选中 crm.project 记录是否按名称排序?同时检查 name_get 方法 crm。项目 及其 display_name 领域将其他存储的相关字段添加到 crm.opportunity 型号:

    crm_project_name = fields.Char('crm.project', 'Construction Type',related='crm_project_id.name', store=True)
    

    在XML中:

    <record id="crm_opportunity_tree_view" model="ir.ui.view">
      <field name="name">crm.opportunity.tree.view</field>
      <field name="model">crm.opportunity</field>
      <field name="arch" type="xml">
        <tree string="Opportunities">
          <field name="name" string="Topic" invisible="1"/>
          <field name="crm_project_id" invisible="1"/>
          <field name="crm_project_name"/>
          <field name="industry_id"/>
        </tree>
      </field>
    </record>
    

    如果您很匆忙(在查找问题时),请执行此操作。但我会做相关的字段 name 以及与 display\u名称 ,并在树状图中对其进行排序,以检查发生了什么(如果 display\u名称 列按ID排序,那么问题是 name\u获取 方法或 display\u名称 现场,毫无疑问)。