Django中的字符串布尔搜索或过滤器



我有一个包含first_name和last_name的用户模型。

class User(AbstractUser):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
address = models.ForeginKey(Address, on_delete=models.CASECAD, related_name='address')
department = models.CharField(max_length=50)
...

假设里面有数据

ID   first_name    last_name 
1    FightWith     Code
2    Jon           Doe
3    John          Cena

和另一个带有Address:

的模型
Class Address(models.Model):
city = models.CharField(max_length=100)
state = models.CharField(max_length=100)
country = models.CharField(max_length=100)
...

包含以下数据:

ID   user    City 
4    1       Ohio
5    2       Delhi
6    3       London

我想根据它们的字段搜索它们,这些字段如first_namecity/state/countrylast_namecity/state/country使用布尔搜索技术,如下所示:

John AND (Ohio OR London)(Jon OR John) AND (Delhi OR London)

有些与那些相似。我确信我们可以使用Q从django.db.modelsoperator模块做到这一点,但我不确定如何。

有没有人这样做过,并且可以在这里指导做同样的事情,那么这将是很棒的。

我希望这个例子对你有用-

from django.db.models import Q
names = ["John", "Jane", "Joe", "Jill"]
cities = ["New York", "Dubai", "London", "Paris"]
_or_names = Q(_connector=Q.OR, *[Q(first_name=name) for name in names])
_or_city = Q(_connector=Q.OR, *[Q(address__city=city) for city in cities])
filter_exp = _or_names & _or_city
User.objects.filter(filter_exp)

如果你正在考虑布尔搜索,并且你的查询可以来自多个字段,你可以尝试django全文搜索查询。https://docs.djangoproject.com/en/4.1/ref/contrib/postgres/search/

最新更新