Django Front End Search - PullRequest
       9

Django Front End Search

0 голосов
/ 22 января 2019

В настоящее время используется Django 2.1, Python 3.6, PostgreSQL 11 и хостинг БД на Heroku.

Я хотел бы реализовать поиск пользователей в представлении устройства, которое я настроил.

Текущий макет страницы На этой странице будут перечислены люди в нашей БД и предоставлена ​​ссылка на детали о них. Мне бы хотелось, чтобы пользователь мог искать конкретного человека и соответственно заполнять список.

Документация Django содержит некоторые шаги для реализации этого, но не совсем ясно о плане действий.

Спасибо за любую помощь!

РЕДАКТИРОВАТЬ: Для справки в нашей базе данных будут сотни людей, и в настоящее время она размещена на Heroku.

РЕДАКТИРОВАТЬ: Models.py

class Topic(models.Model):
top_name = models.CharField(max_length=264,unique=True)
def __str__ (self):
    return self.top_name

class WebPage(models.Model):
    topic = models.ForeignKey('Topic',on_delete=models.PROTECT)
    name = models.CharField(max_length=264,unique=True)
    url = models.URLField(unique=True)
    def __str__(self):
        return self.name

class AccessRecord(models.Model):
    name = models.ForeignKey('WebPage',on_delete=models.PROTECT)
    date = models.DateField()

    def __str__(self):
        return str(self.date)

EDIT: `# Поиск кода

def search(request):

    keywords=''

    if request.method=='POST': # form was submitted

        keywords = request.POST.get("keywords", "")
        all_queries = None
        search_fields = ('name__name','date') # change accordingly
        for keyword in keywords.split(' '): 
            keyword_query = None
            for field in search_fields:
                each_query = Q(**{field + '__icontains': keyword})
                if not keyword_query:
                    keyword_query = each_query
                else:
                    keyword_query = keyword_query | each_query
                    if not all_queries:
                        all_queries = keyword_query
                    else:
                        all_queries = all_queries & keyword_query

        accesses = AccessRecord.objects.filter(all_queries).distinct()
        context = {'accesses':accesses}
        return render(request, 'proj_app/search.html', context)

    else: # no data submitted

        context = {}
        return render(request, 'proj_app/index.html', context)`

1 Ответ

0 голосов
/ 22 января 2019

Вы можете использовать этот пример для реализации собственной поисковой системы в ваших представлениях

def search(request):

    keywords=''

    if request.method=='POST': # form was submitted

        keywords = request.POST.get("keywords", "") # <input type="text" name="keywords">
        all_queries = None
        search_fields = ('title','content','resume') # change accordingly
        for keyword in keywords.split(' '): # keywords are splitted into words (eg: john science library)
            keyword_query = None
            for field in search_fields:
                each_query = Q(**{field + '__icontains': keyword})
                if not keyword_query:
                    keyword_query = each_query
                else:
                    keyword_query = keyword_query | each_query
                    if not all_queries:
                        all_queries = keyword_query
                    else:
                        all_queries = all_queries & keyword_query

        articles = Article.objects.filter(all_queries).distinct()
        context = {'articles':articles}
        return render(request, 'search.html', context)

    else: # no data submitted

        context = {}
        return render(request, 'index.html', context) 

Вам просто нужно изменить следующее:

1 - атрибут имени, используемый в html

<input type="text" name="keywords">
keywords = request.POST.get("keywords", "")

2 - Наименование модели класса

3 - Поля поиска этой модели

Тогда в вашем шаблоне search.html

<table>
    <tr>
        <td>Title</td>
        <td>Author </td>
    </tr>
    {% for article in articles %}
    <tr>
        <td>{{article.title}}</td>
        <td>{{article.author}}</td>
    </tr>
    {% endfor %}
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...