Django:减少数据库查询

时间:2018-07-19 15:36:21

标签: django

我在Django视图中有以下两个查询:

current_events = user.ambassador_profile.first().events.all().filter(end_date__gt=now)
past_events = user.ambassador_profile.first().events.all().filter(end_date__lt=now)

我不确定,但是有更好的方法将它们结合起来。当前,我正在数据库中执行两个查询,我觉得那是错误的。

2 个答案:

答案 0 :(得分:1)

如果您需要过滤除end_date=now以外的所有事件,可以使用exclude

all_events = user.ambassador_profile.first().events.exclude(end_date=now)

答案 1 :(得分:1)

您可以使用annotate and Case向每个对象添加一个属性,说明该属性是否为“当前”

user.ambassador_profile.first().events.all().annotate(
    current=Case(
        When(end_date__gt=now, then=Value(True)),
        default=Value(False),
        output_field=BooleanField()
    )
)