简体   繁体   English

根据条件获取其他模型字段的总和

[英]Get sum of other model field base on condition

I want to the get the sum of the total field of ru.invoice to be displayed on ru.students if the name field of ru.students is equal to student_id of ru.invoice . 我想将得到的总场的总和ru.invoice上显示ru.students如果name字段ru.students等于student_idru.invoice

I used the browse method but it does not work. 我使用了browse方法,但是它不起作用。

class ru_students(models.Model):
    _name = 'ru.students'
    _rec_name = 'code'

def _get_total(self, cr, uid, ids, context=None):
    pool_re = self.pool.get('ru.invoice')
    pool_rec = pool_re.browse(cr, uid, ids, [('name','=','student_id')],    
context=context)
    for field in self:
        for line in pool_rec:
            x = 0.0
            x += line.total
            field.payed += x

    name = fields.Char(string="Name")
    payed = fields.Float(compute="_get_total")


   class ru_invoice(models.Model):
       _name = 'ru.invoice'
       _rec_name = 'code'

    @api.multi
    @api.depends('qty','unit_price')
    def get_total(self):
        for rec in self:
            x = 0.0
            x = rec.qty * rec.unit_price
            rec.total = x


student_id = fields.Many2one('ru.students','Student ID")
qty = fields.Float(string="Quantity")
unit_price = fields.Float(string="Unit Price")
total = fields.Float(compute="_get_totals",string="Total")

First of all, be careful don't mix API7 code with API8 code, use always API8 code if you can (besides, it's going to be much easier for you to use API8). 首先,请注意不要将API7代码与API8代码混合使用,请尽可能使用API​​8代码(此外,使用API​​8会容易得多)。 I think you want this on your field payed (check the class ru_invoice too because I corrected some things there - example: in total field you had written _get_totals in compute when you wanted to call _get_total -). 我认为您希望在您的字段上payed (也请检查ru_invoice类,因为我那里更正了一些内容- 例如:在total字段中,当您想调用_get_total时,您已经在compute编写了_get_totals )。

class ru_students(models.Model):
    _name = 'ru.students'
    _rec_name = 'code'

    @api.multi
    @api.depends('invoices')
    def _get_total(self):
        for student in self:
            student.payed = sum(
                invoice.total for invoice in student.invoices)

    name = fields.Char(string='Name')
    payed = fields.Float(compute='_get_total', string='Payed')
    invoices = fields.One2many(comodel_name='ru.invoice',
                               inverse_name='student_id',
                               string='Invoices of the student')


class ru_invoice(models.Model):
    _name = 'ru.invoice'
    _rec_name = 'code'

    @api.multi
    @api.depends('qty', 'unit_price')
    def _get_total(self):
        for invoice in self:
            invoice.total = invoice.qty * invoice.unit_price

    student_id = fields.Many2one(comodel_name='ru.students',
                                 string='Student ID')
    qty = fields.Float(string='Quantity')
    unit_price = fields.Float(string='Unit Price')
    total = fields.Float(compute='_get_total', string='Total')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM