我有一个包含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_name
和city/state/country
或last_name
和city/state/country
使用布尔搜索技术,如下所示:
John AND (Ohio OR London)
或(Jon OR John) AND (Delhi OR London)
有些与那些相似。我确信我们可以使用Q从django.db.models
和operator
模块做到这一点,但我不确定如何。
有没有人这样做过,并且可以在这里指导做同样的事情,那么这将是很棒的。
我希望这个例子对你有用-
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/