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()
我需要做这样的事情来匹配一些对象。 这是最好的方法吗? 有没有可能以更快的方式做到这一点?
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()