Django 查询集

Django Queryset

我需要做这样的事情来匹配一些对象。 这是最好的方法吗? 有没有可能以更快的方式做到这一点?

if User.objects.filter(first_name=name, age=age).exists():
     user = User.objects.filter(first_name=name, age=age)
     function_x(user)
elif User.objects.filter(full_name__icontains=name, age=age).exists():
     user = User.objects.filter(full_name__icontains=name, age=age)
     function_x(user)

如果您想使用其中一个条件,只需使用 Q 对象,它允许您在查询中使用逻辑 or 运算符。

from django.db.models import Q

User.objects.filter(Q(first_name=name) |
                    Q(full_name__icontains=name),
                    age=age)

在这种情况下,| 表示 or, 表示 and,因此在这两种情况下都需要年龄。

根据变量名称,我猜您希望上述查询针对 return 单个用户。因此,您可以使用 .first():

再消除一次数据库命中

.first() 基本上 return 是查询集匹配的第一个对象,如果没有则 None。通过这种方式,您不必执行 .exists().

user = User.objects.filter(Q(first_name=name) | Q(full_name__icontains=name), age=age).first()