gpt4 book ai didi

python - Django 注释模型并过滤特定值

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:46 26 4
gpt4 key购买 nike

我正在尝试使用 djangos annotate,但不太清楚它是如何工作的。

我有一个函数,我想在其中注释客户的查询集,过滤它们并返回客户数量

def my_func(self):
received_signatures = self.customer_set.annotate(Count('registrations').filter().count()

现在对于过滤器部分,这就是我在弄清楚如何做到这一点时遇到的问题。我要过滤的是我的 received_signatures,这是在我的 customer.py 中调用的函数

def received_signatures(self):
signatures = [reg.brought_signature for reg in self.registrations.all() if reg.status == '1_YES']
if len(signatures):
return all(signatures)
else:
return None

brough_signature 是一个数据库字段

那么我怎样才能注释查询集,过滤 received_signatures 然后返回一个数字呢?

相关模型信息:

class Customer(models.Model):
brought_signature = models.BooleanField(u'Brought Signature', default=False)


class Registration(models.Model):
brought_signature = models.BooleanField(u'Brought Signature', default=False)
status = models.CharField(u'Status', max_length=10, choices=STATUS_CHOICES, default='4_RECEIVED')

注意:参与者和注册可以有brought_signature。我的程序中有一个设置允许我 A) 仅在我的参与者处标记 brought_signature(这意味着他为他的所有注册带来了签名)或 B)为他的每个注册标记 brought_signature

对于这种情况,选项 B) 是相关的。使用我的 received_signatures 我检查客户是否为他的状态为“1_YES”的每个注册带来了每个签名,我想计算所有这样做的客户并返回一个数字(然后我在pygal 图表的另一个功能)

最佳答案

如果我理解正确,你想检查 all 给定 CustomerRegistration 是否有 status == '1_YES 应该具有 .brought_signature = True 属性,并且至少应该有这样的值。有几种方法可以做到这一点。

我们可以这样写:

received_signatures = self.customer_set.filter(
registration__status='1_YES'
).annotate(
minb=Min('registration__brought_signature')
).filter(
minb__gt=0
).count()

所以我们在这里做的是首先 .filter(..) 在状态为 1_YESregistration 上,接下来我们计算对于每个客户,minb 值是这些 Registrationbrought_signature最小值。因此,如果相关 Registrationbrought_signature 之一是 False(在通常为 0 的数据库中>),那么 Min(..) 也是 False。如果所有 brought_signature 都是 True(在通常为 1 的数据库中),则结果为 1 ,然后我们可以根据 minb 应该大于 0 这一事实进行过滤。

因此没有RegistrationCustomer被计算在内,Customer没有 Registration 且状态为 1_YES 的 s,将不被计算在内,具有 RegistrationCustomer 有状态为 1_YES 但带有 brough_signatureRegistration 将不被计算在内。只有 Customerall Registration 状态为 1_YES(本身不是 all Registrations) brough_signature = True 被计算在内。

关于python - Django 注释模型并过滤特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51708625/

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