gpt4 book ai didi

Django 。 Q() 是如何工作的?

转载 作者:行者123 更新时间:2023-12-01 12:50:03 25 4
gpt4 key购买 nike

在我的数据库中有一个表,其中包含一些用户信息。该表称为 UserBalance,字段包括 usercredits_incredits_out 以及 remark (等等)

我正在尝试对某个用户的 credits_in 进行求和,但对于不同的情况我得到了不同的总和。看看这个:

>>> cg = UserBalance.objects.filter(user=ranked_user).filter(remark__icontains='credits g').aggregate(sum_in=Sum('credits_in'))
>>> cg
{'sum_in': 35.85}
>>> cg = UserBalance.objects.filter(user=ranked_user).filter(Q(remark='credits gained') or Q(remark='credits given')).aggregate(sum_in=Sum('credits_in'))
>>> cg
{'sum_in': 26.16}
>>> cg = UserBalance.objects.filter(user=ranked_user).filter(Q(remark='credits given') or Q(remark='credits gained')).aggregate(sum_in=Sum('credits_in'))
>>> cg
{'sum_in': 9.69}

在第一种情况下,我使用了 i_cointains,在第二种和第三种情况下,我使用了 Q(),但切换了它的术语。

谁能解释一下第二种情况和第三种情况有什么区别?

最佳答案

您应该使用(Q(remark='credits gained')|Q(remark='credits given')),而不是(Q(remark='credits gained') 或Q(remark='credits given'))

这是 2 个完全不同的运算符:|是按位或,但它被 Q() 覆盖:

def __or__(self, other):
return self._combine(other, self.OR)

or 是逻辑(或者更确切地说是“合并”)运算符。这意味着 Q(remark='credits gained') 或 Q(remark='credits given') 将返回第一个 not-None 对象,这就是为什么在你的第二种情况下它会导致 Q(remark='credits gained'),第三个 - 在 Q(remark='credits given')

关于 Django 。 Q() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13200344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com