Py学习  »  Django

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

Ahmed • 2 年前 • 401 次点击  

我创建了like books网站,我想通过这本书的标题来显示相关的书,至少用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])
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132332
 
401 次点击  
文章 [ 2 ]  |  最新文章 2 年前
Hady
Reply   •   1 楼
Hady    2 年前

你不需要一份精确的列表 Django足够聪明,可以获得所需的精度

但如果需要实现解决方案,可以编辑查询以

Book.objects.filter(title__icontains__in=[split]

我们已经把 _in 查询失败,因为您在列表中搜索项目,而不是按单词搜索

Ahmed
Reply   •   2 楼
Ahmed    2 年前

我用电脑解决了这个问题 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]))

这将获得标题的第一个和第二个单词,并尝试获得包含这些单词的书籍标题