我创建了类似书籍的网站,我想按这本书的标题显示相关书籍,在推荐书籍中至少显示2个单词。首先,我将当前书籍的标题拆分为一个单词数组,如['good', 'book', 'by', 'mickle']
,并使用title__icontains
过滤书籍,但它显示了一个空列表
我的问题是如何从数组中的单词列表中筛选句子?如果有更好的方法通过标题获得相关对象,则从标题中至少有两个相似的单词
我的书名
class Book(models.Model):
author = models.models.ForeignKey(Account, on_delete=models.CASCADE)
title = models.CharField(max_length=90, null=True, blank=True)
我的功能是按标题获取相关书籍。
class BookRelatedObj(ListAPIView):
serializer_class = BookRelatedSerializer
lookup_field = 'title'
def get_queryset(self):
book_pk = self.kwargs['pk']
book = Video.objects.get(pk=book_pk)
lst = book.title
split = lst.split()
print(split)
return Book.objects.filter(title__icontains=[split])
我使用Q
解决了这个问题
def get_queryset(self):
book_pk = self.kwargs['pk']
book = Video.objects.get(pk=book_pk)
lst = book.title
split = lst.split()
return Book.objects.filter(Q(title__icontains=split[0]) & Q(title__icontains=split[1]))
这得到了标题的第一个和第二个单词,并试图得到一本标题包含这些单词的书
您不需要拆分列表来保证准确性Django足够聪明,可以获得所需的准确度
但是,如果您需要实现您的解决方案,您可以将查询编辑为
Book.objects.filter(title__icontains__in=[split]
我们已将_in
置于查询中,因为您搜索列表中的项目而不是按单词搜索