Django的条件表达式

2024-06-08 15:11:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面这样的django模型:

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

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

我要做的是得到一个特定组织的所有协议的列表(自我组织)并在每一份协议上注明该协议是否由某个特定成员签署(自我会员). 在

如果已签署协议,则存在针对特定协议和成员的已签名_协议实例。在

我如何为此编写查询?在

以下是我目前为止的努力:

^{pr2}$

这没有产生正确的结果。在

任何帮助都将不胜感激。提前谢谢。在


Tags: django模型协议modelmodelsagreement成员class
2条回答

接受的答案对我来说不适用Django 1.11.6。我不得不加上^{} inside ^{}才能使它工作。在

from django.db.models import Case, When, F, BooleanField


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

我想你应该在这里使用^{}。在

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中传递

^{pr2}$

相关问题 更多 >