gpt4 book ai didi

python - Django:条件表达式

转载 作者:太空狗 更新时间:2023-10-29 20:47:12 24 4
gpt4 key购买 nike

我有以下模型:

class Agreement(models.Model):
...
organization = models.ForeignKey("Organization")

class Signed_Agreement(models.Model):
agreement = models.ForeignKey("Agreement")
member = models.ForeignKey("Member")

我想要做的是获取特定组织 (self.organization) 的所有协议(protocol)的列表,并用有关它是否已由特定成员 (self.member) 签署的信息注释每个协议(protocol).

如果协议(protocol)已签署,则存在针对特定协议(protocol)和成员的 Signed_Agreement 实例。

如何为此编写查询?

这是我到目前为止的努力:

from django.db.models import When, F, Q, Value

def get_queryset(self):

agreements = _agreement_model.Agreement.objects.filter(
organization=self.organization
).annotate(
signed=When(Q(signed_agreement__member=self.member), then=Value(True))
).order_by(
'name'
)

return agreements

这不会产生正确的结果。

如有任何帮助,我们将不胜感激。提前致谢。

最佳答案

我想你想使用 Case在这里。

def get_queryset(self):

agreements = _agreement_model.Agreement.objects.filter(
organization=self.organization
).annotate(
signed=Case(When(signed_agreement__member=F('member')),
then=Value(True),
default=Value(False),
output_field=BooleanField()
).order_by(
'name'
)

return agreements

更新

根据评论,在 Django 的更高版本中,then 必须在 When 中传递

def get_queryset(self):

agreements = _agreement_model.Agreement.objects.filter(
organization=self.organization
).annotate(
signed=Case(When(signed_agreement__member=F('member'),
then=Value(True)
),
default=Value(False),
output_field=BooleanField()
).order_by(
'name'
)

return agreements

关于python - Django:条件表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36137528/

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