Python 2.7 如何设置computed one2many字段计算odoo
我只是想知道如何使用计算字段计算来设置one2many中的值。这是我的密码 python文件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
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})]