【问题标题】:Django Front End SearchDjango 前端搜索
【发布时间】:2019-06-16 09:05:36
【问题描述】:

目前使用 Django 2.1、Python 3.6、PostgreSQL 11,并在 Heroku 上托管数据库。

我想在我设置的设备视图上实现用户搜索。

Current Page Layout 此页面将列出我们数据库中的人员,并提供指向他们详细信息的链接。我希望用户能够搜索特定的人并相应地填充列表。

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)

编辑: `# 搜索代码

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)`

【问题讨论】:

  • 您只需要对您的文本输入更改进行 ajax 调用以触发您的服务器并通过他们传递的值查询用户表。然后得到结果并将它们传递回您的视图。您需要通过 JavaScript 将结果绑定到您的 UI。
  • 你有什么办法可以指点我这个演练的方向吗?

标签: python django postgresql user-interface heroku


【解决方案1】:

您可以使用此示例在您的视图中实现自己的搜索引擎

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中使用的name属性

<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>

【讨论】:

  • 超级有帮助!我如何能够使用查询结果填充更改我的列表填充?
  • urls.py 没有改动?
  • 不,您必须将其链接到网址
  • 该网址将用于 search.html?
  • 您提供给我的这段代码只遍历了我模型中的两个字段?您能否解释一下我如何能够添加搜索超过 2 个字段的功能?
猜你喜欢
  • 2018-11-02
  • 2018-04-06
  • 2020-11-29
  • 2017-02-19
  • 2016-09-28
  • 2012-06-20
  • 2014-08-09
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多