【问题标题】:How to display the results based on what the user search django如何根据用户搜索的内容显示结果 django
【发布时间】:2021-11-22 19:00:51
【问题描述】:

我有一个显示数据库详细信息的网页,我有一个搜索栏,它只会根据接收编号和零件编号进行搜索,但是每当我输入详细信息时,它都不会在表格的形式。示例如下:

从 URL 可以看出,它设法显示搜索 = 接收号码,但该表仍显示来自数据库的全部数据,而不是仅显示用户搜索的整行数据接待号码。如何让它以表格的形式显示用户根据接收号和零件号搜索的数据?

views.py

@login_required(login_url='login')
def gallery(request):
    search_post = request.GET.get('reception')
    search_partno = request.GET.get('partno')

    if search_post:
        allusername = Photo.objects.filter(Q(reception__icontains=search_post) & Q(partno__icontains=search_partno))
    else:
        allusername = Photo.objects.all().order_by("-Datetime")

    context = {'allusername': allusername}

    return render(request, 'photos/gallery.html', context)

图库.html

    {% extends "logisticbase.html" %}
    {% block content %}
    <style>
    table {
        border-collapse:separate;
        border:solid black 1px;
        border-radius:6px;
        -moz-border-radius:6px;
    }
    
    td, th {
        border-left:solid black 1px;
        border-top:solid black 1px;
    }
    
    th {
        border-top: none;
    }
    
    td:first-child, th:first-child {
         border-left: none;
    }
    
    
    
    </style>
    <script>
      
    
     // Function to download table data into csv file
            function download_table_as_csv(table_id, separator = ',') {
                var rows = document.querySelectorAll('table#' + table_id + ' tr');
                var csv = [];
                for (var i = 0; i < rows.length; i++) {
                    var row = [], cols = rows[i].querySelectorAll('td, th');
                    for (var j = 0; j < cols.length; j++) {
                        var data = cols[j].innerText.replace(/(\r\n|\n|\r)/gm, '').replace(/(\s\s)/gm, ' ')
                        data = data.replace(/"/g, '""');
                        row.push('"' + data + '"');
                    }
                    csv.push(row.join(separator));
                }
                var csv_string = csv.join('\n');
                var filename = 'export_' + table_id + '_' + new Date().toLocaleDateString() + '.csv';
                var link = document.createElement('a');
                link.style.display = 'none';
                link.setAttribute('target', '_blank');
                link.setAttribute('href', 'data:text/csv;charset=utf-8,' + encodeURIComponent(csv_string));
                link.setAttribute('download', filename);
                document.body.appendChild(link);
                link.click();
                document.body.removeChild(link);
            };
    
    </script>
    
    
       <div style="padding-left:16px">
         <br>
    
    
     <div class="form-block">
         <form class="form-inline my-2 my-lg-0" action="{% url 'gallery' %}">
        <input class="form-control mr-sm-2" type="search"   placeholder="Search" aria-label="Search" name="search">
        <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
    
       <table id="viewTable" class="m-2">
            <i class="fa fa-download" aria-hidden="true"></i>
                <a href="#" onclick="download_table_as_csv('viewTable');">Download as CSV</a>
           <br>
    
      <tr class="header">
        <th>Latest Log</th>
          <th>Part Number</th>
          <th>Serial Number</th>
          <th>Reception/MCO Number</th>
          <th>Customer Name</th>
          <th>Status</th>
      </tr>
             {% for photo in allusername %}
    
    
      <tr>
            <td>{{photo.Datetime}}</td>
          <td>{{photo.partno}}</td>
          <td>{{photo.serialno}}</td>
          <td>{{photo.reception}}/ {{photo.mcoNum}}</td>
          <td>{{photo.Customername}}</td>
          <td>{{photo.status}}</td>
    
      </tr>
    
    {% endfor %}
    
    </table>
         <br>
    
    
    
    
    </div>
       </div>

{% endblock %}

更新代码:

如果我更改为这段代码,它仍然无法根据他们搜索的内容显示结果。

views.py

@login_required(login_url='login')
def gallery(request):
    search_post = request.GET.get('reception')
    search_partno = request.GET.get('partno')
    allusername = []
    if search_post or search_partno:
        allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_partno))
    if not allusername:
        allusername = Photo.objects.all().order_by("-Datetime")

    context = {'allusername': allusername}

    return render(request, 'photos/gallery.html', context)

【问题讨论】:

    标签: html django django-views django-forms


    【解决方案1】:

    试试这样的。
    在您的模板中更改:

     <form class="form-inline my-2 my-lg-0" action="{% url 'gallery' %}">
            <input class="form-control mr-sm-2" type="search"   placeholder="Search" aria-label="Search" name="search">
            <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
        </form>
    

    <form class="form-inline my-2 my-lg-0" action="{% url 'gallery' %}" method='GET' value='{{ request.GET.q }}'>
       <input class="form-control mr-sm-2" type="text"   placeholder="Search" aria-label="Search" name="q" value='{{ request.GET.q }}'/>
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
    

    像这样改变你的views.py。

    @login_required(login_url='login')
    def gallery(request):
        search_post = request.GET.get('q')
        if (search_post is not None) and search_post:
            allusername = Photo.objects.filter(Q(reception__icontains=search_post) | Q(partno__icontains=search_post))
            if not allusername:
                allusername = Photo.objects.all().order_by("-Datetime")
        else:
            allusername = Photo.objects.all().order_by("-Datetime")
    
        context = {'allusername': allusername}
    
        return render(request, 'photos/gallery.html', context)
    

    【讨论】:

    • 你想再次加入聊天吗?
    • @Shadowwalker 这段代码是否有效?
    • 不,我收到一个错误:分配前引用了局部变量“allusername”
    • @Shadowwalker 用你写的新代码更新你的问题
    • if not allusername: allusername = Photo.objects.all().order_by("-Datetime") 如果我从不更改为 not allusername 并输入 else,则没有错误但我仍然无法显示出细节
    猜你喜欢
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 2019-06-07
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多