Python 在django中使用多个值进行搜索

Python 在django中使用多个值进行搜索,python,django,search,filter,Python,Django,Search,Filter,我想在Django中创建简单的搜索。我想找到所有对象,其中关键字数组中的任何单词都在meme.title或meme.author或meme.tags中,user.request是meme.user from django.db import models from django.conf import settings User = settings.AUTH_USER_MODEL class Meme(models.Model): user = models.ForeignKey(

我想在Django中创建简单的搜索。我想找到所有对象,其中关键字数组中的任何单词都在meme.title或meme.author或meme.tags中,user.request是meme.user

from django.db import models
from django.conf import settings

User = settings.AUTH_USER_MODEL

class Meme(models.Model):
    user = models.ForeignKey(User, on_delete='CASCADE')
    title = models.CharField(max_length=100)
    description = models.TextField(null=True,
                         blank=True, max_length=1000)
    author = models.CharField(max_length=100)
    page_link = models.TextField(blank=True, max_length=500)
    img_link = models.TextField(max_length=1000)
    tags = models.CharField(max_length=100)

    def __str__(self):
        return self.title

例如,如果我有关键字=['Funy'、'old'、'black_humor'],当前用户是XYZ,我想找到所有有该meme的meme。用户字段是XYZ,标题、作者或标记包含关键字中的任何单词。

您需要的是一个Q对象。 默认情况下,如果使用
filter
并链接几个参数,它将使用and逻辑。 对于更复杂的查询,如chained和,您需要使用Q。 因此,您的查询集应该如下所示:

from django.db.models import Q
#get the current_user
current_user = request.user
keywords=  ['funny', 'old', 'black_humor']
qs = [Q(title__icontains=keyword)|Q(author__icontains=keyword)|Q(tags__icontains=keyword) for keyword in keywords]

query = qs.pop() #get the first element

for q in qs:
    query |= q
filtered_user_meme = Meme.objects.filter(query, user=current_user)

更多关于Q obects的信息:

谢谢,这太棒了。但是你必须改变一些事情<代码>qs=[Q(title\u icontains=keyword);[Q(author\u icontains=keyword);[Q(tags\u icontains=keyword)用于关键字中的关键字]应该是:
qs=[Q(title\u icontains=keyword);[Q(author\u icontains=keyword);[Q(tags\u icontains=keyword)用于关键字中的关键字)
过滤的用户\u meme=meme.objects.filter(用户=当前用户,查询)
最后一行应该是:
filtered\u user\u meme=meme.objects.filter(query,user=current\u user)
还可以删除'”