如何在Django中实现搜索功能

时间:2019-07-10 11:50:16

标签: django django-models django-forms django-views

我是Django的新手。我正在建立一个项目,该项目可以显示基于特定作者或作者的引用。我在创建搜索功能以显示基于作者姓名的报价时遇到麻烦。如何创建搜索视图功能并将其显示在模板上。

例如,用户从Author类中的author_name中搜索作者名称,然后显示作者的引文列表

下面是我的models.py文件的示例

类作者(models.Model):

author_name = models.CharField(max_length=50)
id = models.AutoField(primary_key=True)
description = models.TextField(max_length=500)
portrait = models.ImageField()

def __str__(self):
    return self.author_name

类Quote(models.Model):

author = models.ForeignKey(Author, on_delete=models.CASCADE)
quote = models.TextField(max_length=500)

def __str__(self):
    return self.quote

2 个答案:

答案 0 :(得分:0)

对于给定的 author_name ,您可以使用以下命令查找该作者的Quote

Quote.objects.filter(author__author_name=author_name)

您可能要使用__icontains lookup [Django-doc],因为如果您搜索Alexander Popepope,则它将与alex匹配:

Quote.objects.filter(author__author_name__icontains=author_name)

答案 1 :(得分:0)

为此,您可以尝试如下操作: 在视图中创建搜索功能。py

def search(request):
 q = request.GET.get('q')
 if q:
       search_results = Quote.objects.filter(author__author_name__icontains=q)
       return render(request, 'template',{'search_results':search_results})
 else:
        messages.info(request,'no results found for {}',format(q))

将此视图映射到某些网址:

path('search/',views.search,name='search')

在模板中这样做:

<form  action="{% url 'search' %}">
     <input type="text" name="q">
     <input type='submit' value='Search'>
   </form>
相关问题