如何在 python、odoo 中使用 For 循环正确计数?

How can I properly count with For loop in python, odoo?

有不同流派的图书记录,本功能只统计其中一种。我怎样才能让它计算所有类型?

函数:

@api.multi
def _total_count(self):

    for genre in self:
        if genre.name:
            count_num = 0
            ids = self.env['books.books'].search([('genre_ids', '=', genre.name)])
            if ids:
                count_num += 1
                genre.count = count_num

您需要将结果存储在某个地方。以下是如何使用 Python 字典,按流派名称:

def _total_count(self):
    total_per_genre = {}
    for genre in self:
        if genre.name:
            count_num = 0
            ids = self.env['books.books'].search([('genre_ids', '=', genre.name)])
            if ids:
                count_num += 1
                genre.count = count_num
            total_per_genre[genre.name] = len(list(ids))
     print(total_per_genre)
     return total_per_genre

编辑:我看错了问题。我认为 len(ids) 是你需要的(我使用 len(list(ids)) 因为我不确定 ids 的类型。请注意我不知道 odoo。

如果您在 gender model 中有一个计算字段 count 并且您想要 每当您将书籍添加到此性别时自动设置其值 你可以这样做:

  1. 首先,我假设 gender_ids 是您书中的 many2many 字段 让我们假设它是这样定义的:
           gender_ids = fields.Many2many(co_model='gender.model.name',
                                         relation='book_gender_rel',
                                         column1='book_id',
                                         column2='gender_id')
  1. 因此您需要在性别中创建相同的 many2many 字段 ,我的意思是该字段应具有相同的字段名称和相同的关系名称 仅对 column1 and column2 的值进行微小更改,如下所示:
       book_ids = fields.Many2many(co_model='book.book',
                                   relation='book_gender_rel',
                                   column1='gender_id',
                                   column2='book_id')
  1. 让你的count字段成为这样的计算字段,最好添加 store=True 如果计算量大,不想接 很多时间只是为了在视图(特殊树视图)中显示性别记录。
       # I renamed the field just to be more readable for others.
       count_book = fields.Integer(string='Number of books',
                                   compute='count_number_of_books',
                                   store=True,
                                   help='Contains number of book that belong to this gender')


       @api.depends('book_ids')
       def count_number_of_books(self):
           """ Count number of books that belong to this gender."""
           for gender in self:
               gender.count_book = len(gender.book_ids)

这样您就可以在报告或其他任何地方使用 count_book 而无需 不必担心计算它,因为 Odoo 会处理它。