我的django应用程序中有两个模型
class Reg(models.Model):
transactions = ManyToMany
price = IntegerField
class Transaction(models.Model)
amount = IntegerField
现在我想查找:
Registration.objects.filter(reg__price==transaction__amount)
以前我们使用以下方法:
这非常耗费查询并且效率低下。 我想知道是否有更好的方法来做到这一点! 任何提示都表示赞赏:)
答案 0 :(得分:2)
您可以使用F
expression进行此类查询:
from django.db.models import F
Registration.objects.filter(price=F('transactions__amount'))
这将过滤Registration
等于price
'之一的所有transactions
个实例。 amount
。如果您想要所有交易金额'总和等于或大于注册价格,您可以使用注释aggregate each registration's Sum
:
paid_registrations = Registration.objects.\
annotate(ta=Sum('transactions__amount')).\ # annotate with ta sum
filter(price__lte=F('ta')) # filter those whose price is <= that sum