'用Odoo v8在同一个表格中将两个模型的两个浮点字段求和'

2024-10-01 13:28:42 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有:

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字段调用的模型:

^{pr2}$

我需要求和field_float1field_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()

我的意思是,每个模型上都有几个字段,它们是从Model1One2many字段调用的,只是这些浮动需要操作,而不是每个字段。在

用户将按顺序填充这些字段,按顺序使用state格式,按顺序使用statusbar等。在


Tags: 模型selffieldfieldsstringmodelmodelsone
1条回答
网友
1楼 · 发布于 2024-10-01 13:28:42

如果你想求和,这个解决方案是可行的

field1 of record1 In first one2many field with field2 of record1 In second one2many field to put the the result in field3 of the first record. 

这是了解你到底需要什么的开始。 在你的模型中,把第三个一个2多个字段设为计算字段

^{pr2}$

我会写更多的cde给你,但我正在用我的手机,我可能会编辑我的答案,希望至少你得到的想法。在

如果您使用onchange,当用户更改float字段的值时,它也可以工作,但是如果您使用它,则删除一个\u 1.field1。在

请记住,您需要在youtmodel1中定义方法,因为在那里您可以完全访问它

相关问题 更多 >