【问题标题】:Odoo v9 Issue with columns not sorting on related fieldsOdoo v9 列未按相关字段排序的问题
【发布时间】:2018-03-02 09:32:18
【问题描述】:

我遇到的问题是某些相关字段上的列无法排序。

我用以下代码 sn-p 扩展了 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')

我使用以下 sn-p 扩展了销售/机会模块:

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: 加载机会页面后,单击“构造类型”(industry_id) 标题不会执行任何操作。

问题 2: 此外,当单击“项目”(crm_project_id) 标题时,该列按 id 而不是名称排序(即使它显示名称)。

我认为问题 2 可以通过添加到 crm.project.py 来解决:

_order = "name asc"

但它不起作用。

任何帮助将不胜感激。

更新

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

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

【问题讨论】:

  • 我的回答对你有帮助吗@3piece?
  • 是的,您的回答是正确且有帮助的。 odoo 中的陈旧缓存问题需要解决。至少我知道这一点是为了设计相关领域的未来。

标签: python xml python-2.7 odoo odoo-9


【解决方案1】:

相关字段不存储在数据库中,并且您无法根据未存储在数据库中的字段进行排序,因此该部分的解决方案是在相关字段中添加store=True

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

您的 Project 字段应该可以正常工作,如果记录按名称排序,您是否检查过 crm.project 的树形视图?还要检查crm.projectname_get 方法及其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_name,并在树视图中对它们进行排序以检查发生了什么(如果display_name 列按ID 排序,那么问题是@ 987654333@ 方法或display_name 字段,毫无疑问)。

【讨论】:

  • 感谢@forvas 的详细回答。奇怪的是,当我将 store=True 添加到行业 ID 字段时,它允许我对列进行排序,但没有数据。即整个列中缺少所有以前的数据。当我删除属性时,数据返回。
  • 我已经在其他 2 个专栏上尝试过这种方法,并且效果很好。但是,出于某种奇怪的原因,在行业 ID 上,没有数据存在。当 store=True 未设置时,则有超过 7,000 条记录。但是当它设置时,有0。
  • @3piece 这可能是因为只有新记录(从现在开始创建)将存储在数据库中。尝试创建一条新记录并检查其industry_id 是否存储在数据库中。如果是这样,那就是原因。
猜你喜欢
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 2013-03-07
相关资源
最近更新 更多