【发布时间】:2021-10-20 19:53:02
【问题描述】:
我想做一个简单的查询:
with transaction.atomic():
Account.objects.select_for_update().filter(payments__status='PENDING', payments__created_date__lt=timezone.now()-timedelta(days=14)).update(balance=F('balance')+Sum(F('payments__amount') - F('payments__payment_fee__fee_amount')), payments__status='COMPLETED')
事实证明这根本不简单。我已经尝试过子查询,但或者得到“在此查询中不允许加入字段引用”或“不允许使用 GROUP BY 子句进行 FOR UPDATE”
子查询不起作用,因为聚合不适用于 select_for_update() 锁。 F() 不起作用,因为它引用了外键字段...
使这个查询工作的最佳方法是什么?有什么想法吗?
- 我在 ORM 后面使用 postgresql。
【问题讨论】:
标签: django postgresql django-models django-orm