【问题标题】:Django QuerysetDjango 查询集
【发布时间】:2017-01-12 17:29:20
【问题描述】:

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

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)

【问题讨论】:

标签: django postgresql django-queryset


【解决方案1】:

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

from django.db.models import Q

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

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

【讨论】:

    【解决方案2】:

    给定变量名称,我猜您希望上述查询返回单个用户。因此,您可以使用.first() 消除更多的数据库命中:

    .first() 基本上返回与查询集匹配的第一个对象,如果没有,则返回None。这样就不用执行.exists()了。

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

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 2012-04-26
      • 2013-12-06
      • 2021-07-25
      • 2011-05-16
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多