假设我有:
class Model1(models.Model):
name = fields.Char(string="Name")
one_1 = fields.One2many('Model2', 'field_many', string="")
one_2 = fields.One2many('Model3', 'field_many2', string="")
one_3 = fields.One2many('Model4', 'field_many3', string="")
以下是从One2many
字段调用的模型:
我需要求和field_float1
和field_float2
,并在{
我可以做:
@api.onchange('field_float1', 'field_float2')
def _compute_amount_move_sales_current(self):
if self.field_float1 or self.field_float2:
self.field_float3 = self.field_float1 + self.field_float2
但是这些是来自两个模型的字段,它们的结果应该反映在第三个模型字段上,而且,这些模型以Model1
的形式,通过3One2many
树状视图,或者通常被称为Odoo的行来表示。在
所以,它只是要读取前两个字段,但它必须是Model1
的形式,这将创建新记录。不是db表。在
编辑
这是一个更精确的解释,用户用这些行或One2many
字段创建一个新记录,在所有情况下,前两个必须被填充,所以我认为在字段上使用required=True
标志可以实现这一点。
不过,我试过这种方法:
class Model1(models.Model):
name = fields.Char(string="Name")
one_1 = fields.One2many('Model2', 'field_many', string="")
one_2 = fields.One2many('Model3', 'field_many2', string="")
one_3 = fields.One2many('Model4', 'field_many3', string="", onchange="compute_sum")
@api.onchange('one_1', 'one_2')
def compute_sum(self):
if self.one_1.field_float1 or self.one_2.field_float2:
self.one_3.field_float3 = self.one_1.field_float1 + self.one_2.field_float2
但它不起作用,每当我填写一个必需的字段_float时,它会说:
ValueError
Expected singleton: Model4()
为了进一步解释,模型如下所示:
class Model2(models.Model):
field_many = fields.Many2one('Model1', string="")
field_float1 = fields.Float()
field_float_ = fields.Float()
field_integer = fields.Integer()
field_char = fields.Char()
class Model3(models.Model):
field_many2 = fields.Many2one('Model1', string="")
field_float2 = fields.Float()
integer = fields.Integer()
class Model4(models.Model):
field_many3 = fields.Many2one('Model1', string="")
field_float3 = fields.Float()
chars = fields.Char()
bool = fields.Boolean()
我的意思是,每个模型上都有几个字段,它们是从Model1
和One2many
字段调用的,只是这些浮动需要操作,而不是每个字段。在
用户将按顺序填充这些字段,按顺序使用state
格式,按顺序使用statusbar
等。在
如果你想求和,这个解决方案是可行的
这是了解你到底需要什么的开始。 在你的模型中,把第三个一个2多个字段设为计算字段
^{pr2}$我会写更多的cde给你,但我正在用我的手机,我可能会编辑我的答案,希望至少你得到的想法。在
如果您使用onchange,当用户更改float字段的值时,它也可以工作,但是如果您使用它,则删除一个\u 1.field1。在
请记住,您需要在youtmodel1中定义方法,因为在那里您可以完全访问它
相关问题 更多 >
编程相关推荐