library_book.py 925 B

12345678910111213141516171819202122
  1. from odoo import fields, models
  2. class Book(models.Model):
  3. _inherit = 'library.book'
  4. is_available = fields.Boolean('Is Available?')
  5. # 为isbn字段添加一条提示,说明同时支持10位数和13位数的 ISBN,稍后会实现该功能
  6. isbn = fields.Char(help="Use a valid ISBN-13 or ISBN-10.")
  7. # 为publisher_id字段添加数据库索引,以提升搜索效率
  8. publisher_id = fields.Many2one(index=True)
  9. def _check_isbn(self):
  10. self.ensure_one()
  11. isbn = self.isbn.replace('-', '')
  12. digits = [int(x) for x in isbn if x.isdigit()]
  13. if len(digits) == 10:
  14. ponderators = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  15. total = sum(a * b for a, b in zip(digits[:9], ponderators))
  16. check = total % 11
  17. return digits[-1] == check
  18. else:
  19. # super()来调用父类已实现的方法
  20. return super()._check_isbn()