Перво-наперво: вы должны беспокоиться о производительности в основном при пакетных операциях. Ваш случай - это метод обмена, который означает:
- это будет вызвано вручную при взаимодействии с пользователем.
- это повлияет только на одну запись за раз.
- не будет выполнять запись в базу данных.
Так что, по сути, это не будет критическим узким местом в вашем модуле.
Тем не менее, вы спрашиваете, как это могло бы быть лучше, так что здесь все идет. Это просто идея, в некоторых точках просто другая (не лучше), но таким образом вы можете увидеть другой подход в другом месте, которое вы предпочитаете:
def _ocnhange_date(self):
# Use this alternative method, easier to maintain
self.date = fields.Datetime.now()
# Less code here, although almost equal
# performance (possibly less)
total = 0
for field in ("drawer", "flexible", "runner",
"group_1", "group_2", "group_3"):
potential = self["%s_id"].product_categ_price * self["%s_qty"]
total += potential
self["%s_potential"] = potential
# We use a generator instead of a list
self.total_potential = total