【问题标题】:Odoo10 Hierachy viewOdoo10 层次结构视图
【发布时间】:2017-07-25 09:15:53
【问题描述】:

我必须在 Odoo10 中为我的模型创建层次结构视图。我做了以下事情。但我能得到它。我希望这看起来像 odoo8 帐户视图图表。

pyhon 文件:

class InconceExpenseDetails(models.Model):
    _name = "income.expense.details"

    parent_id = fields.Many2one("income.expense.details","Income ID")
    child_ids = fields.One2many("income.expense.details","parent_id",string="Income IDS",select=True)
    product_category = fields.Char("Category")
    planned_amount = fields.Float('Planned Amount', digits=0)
    actual_amount = fields.Float('Actual Amount', digits=0)
    variance = fields.Float('Variance', digits=0)
    currency_id = fields.Many2one('res.currency', string="Currency", default=lambda self: self.env.user.company_id.currency_id)
    company_id = fields.Many2one("res.company",string="Company",default=lambda self: self.env.user.company_id)
    type_seq = fields.Char("Sequence", select=1)
    type = fields.Selection([
        ('revenue', 'Revenue'),
        ('income', 'Income'),
        ('expense', 'Expense'),
    ], string="Type")

查看文件:

       <record id="view_budget_tree_view" model="ir.ui.view">
            <field name="name">income.expense.details.tree</field>
            <field name="model">income.expense.details</field>
            <field name="field_parent">child_ids</field>
            <field name="arch" type="xml">
                <tree colors="blue:type == 'income'" string="Income and Expense Details" toolbar="1">
                    <field name="type_seq"/>
                    <field name="type"/>
                    <field name="product_category"/>
                    <field name="planned_amount"/>
                    <field name="actual_amount"/>
                    <field name="variance"/>
                    <field name="currency_id"/>
                    <field name="company_id"/>
                    <field name="parent_id" invisible="1"/>
                </tree>
            </field>
        </record>

动作窗口:

<record id="action_budget_tree_view" model="ir.actions.act_window">
        <field name="name">income.expense.details.tree</field>
        <field name="res_model">income.expense.details</field>
        <field name="view_type">tree</field>
        <field name="domain">[('parent_id','=',False)]</field>
        <field name="view_id" ref="view_budget_tree_view"/>
    </record>

如果我把它变成普通的树视图,它就可以正常工作。但我希望它作为 Odoo8 帐户图表中的层次结构视图

【问题讨论】:

    标签: treeview openerp hierarchy odoo-10


    【解决方案1】:

    您需要创建一个 Many2many 字段 child_id。 one2many 字段的 child_ids 已经存在,请保持原样。创建另一个字段 child_id(M2m - 计算)

    @api.multi
    def _get_child_ids(self):
        for record in self:
            result = []
            if record.child_ids:
                result = record.child_ids.ids
            record.child_id = [(6,0,result)]
    
    child_id = fields.Many2many(compute=_get_child_ids, comodel_name="income.expense.details",                               relation='self_rel_child', column1='child_type_id_1', column2='child_type_id_2',string="Income / Expense")
    

    Xml 看起来不错,只需将 One2many (child_ids) 替换为 Many2many (child_id)。

       <record id="view_budget_tree_view" model="ir.ui.view">
            <field name="name">income.expense.details.tree</field>
            <field name="model">income.expense.details</field>
            <field name="field_parent">child_id</field>
            <field name="arch" type="xml">
                <tree colors="blue:type == 'income'" string="Income and Expense Details" toolbar="1">
                    <field name="type_seq"/>
                    <field name="type"/>
                    <field name="product_category"/>
                    <field name="planned_amount"/>
                    <field name="actual_amount"/>
                    <field name="variance"/>
                    <field name="currency_id"/>
                    <field name="company_id"/>
                    <field name="parent_id" invisible="1"/>
                </tree>
            </field>
        </record>
    

    动作应该是这样的,

        <record id="action_chart_tree" model="ir.actions.act_window">
            <field name="name">Chart of Income Expense</field>
            <field name="res_model">income.expense.details</field>
            <field name="view_type">tree</field>
            <field name="view_id" ref="view_budget_tree_view"/>
            <field name="domain">[('parent_id','=',False)]</field>
        </record>
    

    【讨论】:

      【解决方案2】:

      您需要计算字段级别:

         level = fields.Integer(compute='_get_level', string='Level', store=True)
      
      
         @api.multi
          @api.depends('parent_id', 'parent_id.level')
          def _get_level(self):
              '''Returns a dictionary with key=the ID of a record and value = the level of this  
                 record in the tree structure.'''
              for report in self:
                  level = 0
                  if report.parent_id:
                      level = report.parent_id.level + 1
                  report.level = level
      

      看看account模块中的account.financial.report

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-11
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        • 2017-06-07
        • 2018-09-14
        • 2012-03-11
        相关资源
        最近更新 更多