我在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)
我不确定,但是有更好的方法将它们结合起来。当前,我正在数据库中执行两个查询,我觉得那是错误的。
答案 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()
)
)