ns = params_kw.copy() for k,v in ns.items(): if v == 'NaN' or v == 'null': ns[k] = None # Recalculate available_credit when credit_limit changes if 'credit_limit' in ns and ns['credit_limit'] is not None: credit_limit_val = float(ns['credit_limit']) # Get current used_credit from DB db = DBPools() dbname = get_module_dbname('accounting') async with db.sqlorContext(dbname) as sor: recs = await sor.R('credit_limit', {'id': ns['id']}) if len(recs) > 0: used = float(recs[0].get('used_credit', 0)) ns['available_credit'] = credit_limit_val - used from datetime import datetime ns['updated_at'] = datetime.now() db = DBPools() dbname = get_module_dbname('accounting') async with db.sqlorContext(dbname) as sor: r = await sor.U('credit_limit', ns) debug('update credit_limit success') return { "widgettype":"Message", "options":{ "title":"信用额度更新成功", "cwidth":16, "cheight":9, "timeout":3, "message":"ok" } } return { "widgettype":"Error", "options":{ "title":"更新失败", "cwidth":16, "cheight":9, "timeout":3, "message":"failed" } }