Python 在django中使用多个值进行搜索
我想在Django中创建简单的搜索。我想找到所有对象,其中关键字数组中的任何单词都在meme.title或meme.author或meme.tags中,user.request是meme.userPython 在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(
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)
还可以删除'”