多个字段上的Django查询对象Q?

Posted

技术标签:

【中文标题】多个字段上的Django查询对象Q?【英文标题】:Django Query object Q on multiple fields? 【发布时间】:2014-03-22 11:26:24 【问题描述】:

我有一个 Django 模型

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

现在我想搜索用户。问题是当我这样做时

Q(first_name__icontains=search_string) | Q(last_name__icontains=search_string) 

它只分别搜索 first_name 和 last_name。但是,如果有人在搜索栏中输入全名,则不会给出任何结果,因为全名(first_name+last_name)不包含在 first_name 或 last_name 中。 我不想更改我的模型,但在搜索时结合字段(first_name +last_name)动态查询,有什么办法吗?

【问题讨论】:

您可以split搜索字符串并在各自的字段中搜索2个字符串。 【参考方案1】:

如果你有多个用空格分隔的单词并使用 istartswith。检查它是单个词还是多个词,如果单个使用您当前的搜索,否则拆分并使用如下。

Q(first_name__istartswith="Firstname") | Q(last_name__istartswith="Firstname") | Q(first_name__istartswith="Lastname") | Q(last_name__istartswith="Lastname") )

【讨论】:

以上是关于多个字段上的Django查询对象Q?的主要内容,如果未能解决你的问题,请参考以下文章

Django ORM - 通过多个相关对象和 Q 查询选择

Django Newbie - 使用多字段表单,如何消除查询集中的空字段

Django篇之F,Q

Django 表单:查询结果定义的字段,单个视图同时更新多个对象

django基础知识之模型查询:

在 Django 中为多个查询编写视图的最佳方法?