Как реализовать функцию поиска в Django - PullRequest
1 голос
/ 10 июля 2019

Я новичок в Джанго.И я настраиваю проект, который может отображать цитаты на основе конкретного автора или писателя.У меня возникают проблемы при создании функции поиска для отображения цитат на основе имени автора.Как создать функцию просмотра в виде поиска и отобразить ее в шаблоне.

Например, пользователь ищет имя автора по имени имя-автора в классе Author, а затем отображает список цитат автора

Ниже приведен пример моего файла 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

Класс Цитата (models.Model):

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

def __str__(self):
    return self.quote

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Для этого вы можете попробовать вот так: Сделайте функцию поиска в вашем views.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))

сопоставить это представление с некоторым URL:

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

А в вашем шаблоне сделайте так:

<form  action="{% url 'search' %}">
     <input type="text" name="q">
     <input type='submit' value='Search'>
   </form>
0 голосов
/ 10 июля 2019

Для данного author_name вы можете посмотреть Quote s этого автора с помощью:

Quote.objects.filter(<b>author__author_name=<i>author_name</i></b>)

Возможно, вы захотите использовать поиск __icontains [Django-doc] , поскольку он будет соответствовать Alexander Pope, если вы ищете pope или alex:

Quote.objects.filter(author__author_name<b>__icontains</b>=<i>author_name</i>)
...