如何在Django中从数组中的单词列表中筛选句子



我创建了类似书籍的网站,我想按这本书的标题显示相关书籍,在推荐书籍中至少显示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置于查询中,因为您搜索列表中的项目而不是按单词搜索

最新更新