我有三个vaiables:first_name,last_name和middle_name。
过滤我正在做的结果
Q(contact__first_name__icontains=query) |
Q(contact__last_name__icontains=query) |
Q(contact__middle_name__icontains=query)
我希望能够在first_name,last_name和middle_name的串联中搜索查询。我怎么能用Q对象呢?
这可能吗?
答案 0 :(得分:0)
对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])