如何在 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
并且您想要
每当您将书籍添加到此性别时自动设置其值
你可以这样做:
- 首先,我假设
gender_ids
是您书中的 many2many 字段
让我们假设它是这样定义的:
gender_ids = fields.Many2many(co_model='gender.model.name',
relation='book_gender_rel',
column1='book_id',
column2='gender_id')
- 因此您需要在性别中创建相同的
many2many
字段
,我的意思是该字段应具有相同的字段名称和相同的关系名称
仅对 column1 and column2
的值进行微小更改,如下所示:
book_ids = fields.Many2many(co_model='book.book',
relation='book_gender_rel',
column1='gender_id',
column2='book_id')
- 让你的
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 会处理它。
有不同流派的图书记录,本功能只统计其中一种。我怎样才能让它计算所有类型?
函数:
@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
并且您想要
每当您将书籍添加到此性别时自动设置其值
你可以这样做:
- 首先,我假设
gender_ids
是您书中的 many2many 字段 让我们假设它是这样定义的:
gender_ids = fields.Many2many(co_model='gender.model.name',
relation='book_gender_rel',
column1='book_id',
column2='gender_id')
- 因此您需要在性别中创建相同的
many2many
字段 ,我的意思是该字段应具有相同的字段名称和相同的关系名称 仅对column1 and column2
的值进行微小更改,如下所示:
book_ids = fields.Many2many(co_model='book.book',
relation='book_gender_rel',
column1='gender_id',
column2='book_id')
- 让你的
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 会处理它。