【问题标题】: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])