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,因此两种情况下都需要年龄

给定变量名,我猜您期望上面的查询返回单个用户。因此,您可以使用.first():

消除一个db命中。

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

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

相关内容

  • 没有找到相关文章

最新更新