Python 2.7 如何设置computed one2many字段计算odoo

Python 2.7 如何设置computed one2many字段计算odoo,python-2.7,openerp,odoo-8,odoo-9,Python 2.7,Openerp,Odoo 8,Odoo 9,我只是想知道如何使用计算字段计算来设置one2many中的值。这是我的密码 python文件 from openerp import models ,fields,api from openerp import SUPERUSER_ID from dateutil.relativedelta import relativedelta import openerp.addons.decimal_precision as dp import math import logging import da

我只是想知道如何使用计算字段计算来设置one2many中的值。这是我的密码

python文件

from openerp import models ,fields,api
from openerp import SUPERUSER_ID
from dateutil.relativedelta import relativedelta
import openerp.addons.decimal_precision as dp
import math
import logging
import datetime

class extend_product_product(models.Model):
    _inherit = 'product.product'

    monthly_lines = fields.One2many('minmax.monthly.data','month_id', 'Monthy Sales',compute="_get_monthly_sales")

 @api.one
 def _get_monthly_sales(self):
    vals = {}
    vals.update({'monthly_lines':[(0,0,{'month_name_id':1,'so_qty':35})]})
    self.write(vals) # Also I have tried self.monthly_lines = [(0,0,{'month_name_id':1,'so_qty':35})]

class minmax_monthly_data(models.Model):
    _name = 'minmax.monthly.data'

    month_id = fields.Many2one('product.product', 'Product Reference', select=True, required=True)
    month_name_id = fields.Many2one('minmax.months','Minmax Month',required=True)
    so_qty = fields.Float('Sales Qty', digits_compute=dp.get_precision('Product Unit of Measure'), required=True)
XML文件

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
      <record model="ir.ui.view" id="product_monthly_minmax_tree">
            <field name="name">product.product.tree</field>
            <field name="model">product.product</field>
            <field name="inherit_id" ref="product.product_product_tree_view"/>
            <field name="type">form</field>
            <field name="arch" type="xml">
                <field name="ean13" position="after">
                    <field name="monthly_lines" widget="one2many_tags" />
                </field>
            </field>
        </record>
    </data>
</openerp>

产品树
产品
形式
在这里,我尝试手动插入数据。无论何时加载product.product树视图,都会正确调用该函数。但没有结果。提前谢谢

在您的代码中,您没有指定该记录对应的产品 属于,这就是为什么此记录未映射到任何one2many 记录,因为没有定义多个引用。意味着你需要 在最小最大月数据模型中设置月id,然后您可以 请参见product.product中one2many字段中的数据

你的代码应该是这样的

class extend_product_product(models.Model):
    _inherit = 'product.product'

    monthly_lines = fields.One2many('minmax.monthly.data','month_id', 'Monthy Sales',compute="_get_monthly_sales")

    @api.multi
    def _get_monthly_sales(self):
        for rec in self:
            rec.monthly_lines = [(0,0,{'month_name_id':1,'so_qty':35, 'month_id' : rec.id})]
在新的api函数字段中直接分配对象,我们不需要像在旧版本中一样返回字典

这些功能字段可以存储到数据库中,因此您只需要在字段定义中设置store=True属性

如果您将字段存储在数据库中,那么在这种情况下,我们也需要更新它的值,为此,您需要使用
@api.depends('field name1','field name2')

当您设置 记录中有多个引用,则逆模型有多个引用 关系,并将自动管理(需要定义One2many字段)。不管你怎么做 同样,这是双向的,因此您需要管理其中任何一个 很多21或12个


同样的结果。minmax_monthly_数据表中未存储任何数据。谢谢你的回复。还有其他方法吗?你没有设置多个引用,请看我更新了函数。除非您在
minmax.monthly.data
model中设置manyOne参考,否则它不会显示在One2many model中。物理记录在那里,您可以签入数据库。有一个记录,但与任何产品无关。酷。当我添加store=True属性时,它可以正常工作。但该函数仅在我更新依赖字段时触发。在初始模块安装中不调用它。我可以在模块安装中更新此one2many字段吗?首先在py中注释掉此字段,然后重新启动服务器和升级模块,然后取消对该字段的注释,然后再次重新启动服务器和升级模块。
@api.multi
@api.depends('fieldname')
def _get_monthly_sales(self):
    for rec in self:
        rec.monthly_lines = [(0,0,{'month_name_id':1,'so_qty':35,'month_id' : rec.id})]