Лучший подход к созданию фильтруемой таблицы с помощью Django

Я создал шаблон, в котором есть HTML-таблица и iframe, который отображает pdf-файлы, загруженные пользователем ранее: enter image description here

Цель состоит в том, чтобы пользователь мог сопоставить записи в таблице с pdf / несколькими pdf. Эта часть уже выполнена.

Но теперь я хотел бы узнать, какой подход лучше всего подходит для фильтрации данных в моей таблице. Я создал таблицу следующим образом:

Если бы я построил таблицу полностью на JavaScript, то фильтрация не была бы проблемой, но я не думаю, что это правильный подход к Django?
Можно ли применить фильтр непосредственно к контекстным данным во фронтенде, возможно, с помощью JavaScript?
Я не хочу перезагружать данные каждый раз, когда кто-то вводит что-то в поле фильтра, так как я уже загрузил нужные данные и хочу избежать лишних запросов к базе данных. Может ли кто-нибудь указать мне правильное направление, чтобы начать работу?
Спасибо!

Редактирование:
. Я забыл упомянуть, что я предпочитаю не использовать предварительно собранные библиотеки Django, поскольку я все еще учусь и мне нужно довольно много настроек.

Edit2: Минимально воспроизводимый пример -> stack.html:

{% extends "website/base.html" %}
{% block content %}
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'evidence/css/style.css' %}">
<div class="container">
    {% csrf_token %}
    <div class="row">
        <div class="col-8">
            <div class="row">
                <div class="col-12">
                    <table class="table">
                        <thead class="table-dark">
                            <tr>
                                <td>
                                    mame
                                </td>
                                <td>
                                    hash
                                </td>
                                <td>
                                    something
                                </td>
                            </tr>
                        </thead>
                        <tbody>
                            {% for row in stack %}
                            <tr>
                                <td>
                                    {{ row.name }}
                                </td>
                                <td>
                                    {{ row.hash }}
                                </td>
                                <td>
                                    {{ row.something }}
                                </td>
                            </tr>
                            {% endfor %}
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</div>
{% endblock %}

view:

def stack(request):
    context = Stack.objects.all()
    return render(request, "evidence/stack.html", {"stack": context})

URLs:

app_name = "evidence"
urlpatterns = [
 ...,
    path('stact', stack, name='stack'),
]

Модель:

class Stack(models.Model):
    name = models.CharField(max_length=150)
    hash = models.CharField(max_length=150)
    something = models.CharField(max_length=150)

Вы можете сделать фильтрацию только через JS, но если вы включите пагинацию, то вам придется делать фильтрацию через запросы к базе данных бэкенда. а правильный способ - сделать правильную фильтрацию и пагинацию через бэкенд. вы можете просто добавить кнопку для фильтрации, а не фильтровать при вводе мгновенно.

Вернуться на верх