多个字段上的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 Newbie - 使用多字段表单,如何消除查询集中的空字段