【问题标题】:Q object in Django QuerysetDjango 查询集中的 Q 对象
【发布时间】:2015-07-15 09:51:19
【问题描述】:

我有三个变量 first_name、last_name 和 middle_name。

过滤我正在做的结果

Q(contact__first_name__icontains=query) |
Q(contact__last_name__icontains=query) |
Q(contact__middle_name__icontains=query) 

我希望能够以名、姓和中间名的串联形式搜索查询。如何使用 Q 对象做到这一点?

这可能吗?

【问题讨论】:

    标签: django django-models django-q


    【解决方案1】:

    对 Q 表示怀疑,但对于 extra,您可以尝试一下:

    SQLite3:
    Person.objects.extra(where=["first_name || ' ' || middle_name || ' ' || last_name = " + query])
    
    MySQL:
    Person.objects.extra(where=["CONCAT(first_name, ' ', middle_name, ' ', last_name) = " + query])
    

    如果您开始使用原始 SQL,可能无法在不同的数据库引擎上移植。

    关于 Q,如 Django 网站所引用:

    Q() 对象与F 对象一样,将 SQL 表达式封装在一个 可用于数据库相关操作的 Python 对象。

    你可以改变你的方法如下:

    query = 'MyFirstName MyMiddleName MyLastName'.split(" ")
    
    Q(contact__first_name__icontains=query[0]) &
    Q(contact__last_name__icontains=query[2]) &
    Q(contact__middle_name__icontains=query[1]) 
    

    【讨论】:

      猜你喜欢
      • 2014-02-06
      • 2013-12-11
      • 2015-08-19
      • 2015-06-23
      • 2010-12-27
      • 2021-09-15
      • 2013-02-27
      • 2014-03-22
      相关资源
      最近更新 更多