我需要做这样的事情来匹配一些对象。这是最好的方法吗?有可能用更快的方法做这件事吗?
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
,因此两种情况下都需要年龄
给定变量名,我猜您期望上面的查询返回单个用户。因此,您可以使用.first()
:
.first()
基本上返回与查询集匹配的第一个对象,如果没有,则返回None
。通过这种方式,您不必执行.exists()
。
user = User.objects.filter(Q(first_name=name) | Q(full_name__icontains=name), age=age).first()