【问题标题】:Show one2many field in a tree view of different model [Odoo]在不同模型的树视图中显示 one2many 字段 [Odoo]
【发布时间】:2018-05-09 01:19:59
【问题描述】:

我想显示在特定发票中应用的所有税款及其金额[在模型 account.invoice 的树视图中] 这是输出:

Tax Lines 列显示了 account.invoice.tax 表中存在的税的 ID(而我想显示它们的名称和相应的金额)

模型 account.invoice 有一个名为 tax_line_ids[Tax Lines] 的字段,其中包含发票上所有税款的记录,该记录存储在单独的表 account.invoice.tax 中,在其自己的树视图中如下所示:

我想提取税名及其对应的金额以反映在 account.invoice 的树形视图中

这是我的 python 代码,它似乎不起作用:

@api.one
def taxz(self):
    tax_pool = self.pool.get("account.tax")
    found_taxes = tax_pool.read(cr, uid, [tax_id,], ["tax_line_ids"], context)
    found_tax = found_taxes[0] if found_taxes else None
    tax_line_ids = found_tax["tax_line_ids"]
    _logger.critical("context type: " + type(context))
    _logger.critical("context content: " + str(context))
    _logger.critical(tax_line_ids)

视图的xml代码:

<field name="tax_line_ids" widget="many2many_tags" />

【问题讨论】:

    标签: python odoo odoo-10


    【解决方案1】:

    您可以添加一个字符字段,只是为了在树视图中显示它:

    class Invoice(models.Model):
            _inherit = 'account.invoice'
    
            tax_line_tree_view = fields.Char(compute='get_tax_list')
    
            @api.multi
            def get_tax_list(self):
                 tax_disp = ""
                 for rec in self:
                      if rec.taxe_line:
                           for tax in taxe_line:
                                tax_disp = tax_disp + "["+tax.name+"], " 
                           rec.tax_line_tree_view = tax_disp[:-2] # [:-2] just to remove the last ', ' characters.
                      else:
                           rec.tax_line_tree_view  = tax_disp
    

    在 tree_view 所在的 XML 文件中,添加以下字段:

    <field name="tax_line_tree_view " />
    

    而不是 tax_line_ids。

    我希望能回答你的问题。

    【讨论】:

      【解决方案2】:

      试试这个:

          class Invoice(models.Model):
              _inherit = 'account.invoice'
      
              tax_line_ids = fields.Many2many('account.invoice.tax',
                                              'invoice_taxes', 
                                              'invoice_id', 
                                              'taxt_id',
                                              'List of taxes',
                                          compute='get_tax_list', store=True)
      
      
      
              @api.depends('tax_line', 'tax_line.amount')
              def get_tax_list(self):
                  for rec in self:
                      if rec.taxe_line:
                          rec.tax_line_ids = [(6,0,rec.tax_line.ids)]
                      else:
                          rec.tax_line_ids = [(5,0,0)]
      

      但是这样做只会在树形视图中显示没有金额的税款列表 如果你想显示需要覆盖account.invoice.tax 中的name_get 方法的数量@ 但这会影响所有x2many 字段。

      class AcountInvoiceTax(models.Model):
      
          _inherit = 'account.invoice.tax'
      
          @api.multi
          def name_get(self):
              res = []
              for rec in self:
                  res.append((rec.id, rec.name +': '+ str(rec.amount)))
              return res
      

      如果您不想要这个,那么您需要将类型更改为Char 并重新计算该字段 或创建另一个 model 以节省税款并为该模型定义 name_get

      你现在可以看到这对我有用,如果你仍然得到 keyErro 你一定做错了检查你的代码是否有缩进继承值...:

      【讨论】:

      • 刚刚尝试了第一部分,但它不起作用 [显示一个空列表] 我将 @api.depends 更改为 tax_line_ids,否则它会显示关键错误。
      • 它应该工作的问题尝​​试在方法的开头放置一个打印以查看它是否被调用
      • 对不起,我错了,名字是 tax_line 而不是 taxe_line
      • 我已经改变了它,它仍然没有工作。加上控件没有进入函数,我放了一个_logger,它没有打印任何东西。
      • 你把方法属于account.invoice和account.invoice的方法放在哪里了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 2018-12-21
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多