django - 检查过滤器是否返回查询集中的任何内容

mb5*_*089 5 django django-errors

我是django的新手.我需要检查查询集是否返回任何值,如果没有,则跳转到循环中的下一个项目.我试过尝试..除了ObjectDoesNotExist,这是行不通的.如果过滤器没有找到任何东西,它会返回什么?我该如何检查?

这是现有的代码:

def assign_family_riders(leg):
    remaining_leg_riders = list(leg.riders.all())
    for car in CarAssignment.objects.filter(leg=leg):
        driver_family = car.driver.family
        try:
            riders = leg.riders.all().filter(family=driver_family)
        except ObjectDoesNotExist:
            continue
        for rider in riders:
            car.riders.add(rider)
            remaining_leg_riders.remove(rider)
    return remaining_leg_riders
Run Code Online (Sandbox Code Playgroud)

Tim*_*ony 9

您无需专门检查.如果过滤器未返回任何对象,则将返回EmptyQuerySet并且永远不会输入forloop.

riders = leg.riders.filter(family=driver_family)
for rider in riders:
    ...
Run Code Online (Sandbox Code Playgroud)

如果你真的想,你可以简单地做:

riders = leg.riders.filter(family=driver_family)
if riders:
    for rider in riders:
        ...
Run Code Online (Sandbox Code Playgroud)

ObjectDoesNotExist异常只是提出,当你试图检索使用特定的记录get():

try:
     rider = leg.riders.get(...)
except Rider.DoesNotExist:
    ...
Run Code Online (Sandbox Code Playgroud)