Строка поиска для django

У меня есть страница, на которой сотрудники могут видеть введенный ими персонал, но если списки становятся слишком длинными, трудно найти то, что они хотели, следовательно, я хочу создать строку поиска и кнопку, чтобы они могли легко искать материал и отображать его в форме карточки, как показано ниже, как мне это сделать?

Вот как выглядит мой сайт (в url он показывает q=76464, но он просто не отображает q=76464) enter image description here

views.py

def outgoinggallery(request):
    user = request.user
    query = request.GET.get('q')
    category = request.GET.get('category')
    if category == None:
        alloutgoinglru = OutgoingLRU.objects.filter(category__user=user)
    else:
        alloutgoinglru = OutgoingLRU.objects.filter(
            category__name=category, category__user=user)
        if query:
            return OutgoingLRU.objects.filter(title__icontains=query)
        else:
            return OutgoingLRU.objects.all()

    categories = Category.objects.filter(user=user)
    context = {'categories': categories, 'alloutgoinglru': alloutgoinglru}

    return render(request, 'Outgoing/outgoinggallery.html', context)

outgoinggallery.html

{% extends "logisticbase.html" %}
{% block content %}
    <!-- CSS only -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">

    <style>



td, th {
  border: 1px solid #dddddd;
  text-align: left;
  padding: 8px;
  border-radius: 15px;
}
        .image-thumbail {
            height: 200px;
            object-fit: cover;
        }


        .list-group-item a {
            text-decoration: none;
            color: black;
        }
    </style>




    <br>


   <div style="padding-left:16px">

        <div class="row">


            <div class="col-md-9">
                <div class="row">
                    <h5>View Outgoing LRU</h5>
                    <div class="col-md-7">
                    <form method="GET" action="" id="searchform">
                        <input class="searchfield" id="searchbox" name="q" type="text" value="{{ request.GET.q }}" placeholder="Search..."/>
                        <button>Search</button>
                    </form>
                    </div>
                    <br>
                    <div class="col-md-9">
                <div class="row">

                    {% for OutgoingLRU in alloutgoinglru %}
                    <div class="col-md-4">
                        <div class="card my-2">
                            <img class="image-thumbail" src="{{OutgoingLRU.image.url}}" >

                            <div class="card-body">
                                <small>Customer Name: {{OutgoingLRU.category.name}}</small>
                                <br>
                                <small>Delivery Order: {{OutgoingLRU.Deliveryor}}</small>
                            </div>
                            <a href="{% url 'viewlruphoto' OutgoingLRU.id %}"  style="width:265px" class="btn btn-outline-dark btn-sm m-1">View</a>
                            <form action="{% url 'deleteoutgoing' OutgoingLRU.id %}" method="post">
                                {% csrf_token %}
                                <button type="submit" style="width:270px" class="btn btn-sm btn-danger">Delete</button>
                            </form>

                        </div>
                    </div>
                    {% empty %}
                    <h3>No photos...</h3>
                    {% endfor %}








                </div>
            </div>
        </div>
   </div>


{% endblock %}

urls.py

urlpatterns = [

    path('register/', views.register, name='register'),
    path('adminpage/', views.admin, name='adminpage'),
    path('customer/', views.customer, name='customer'),
    path('logistic/', views.logistic, name='logistic'),
    path('forget/', views.forget, name='forget'),
    path('changepassword/', views.changepassword, name='changepassword'),

    path('newblock/', views.newblock, name='newblock'),
    path('quote/', views.quote, name='quote'),
    path('profile/', views.profile, name='profile'),
    path('adminprofile/', views.adminprofile, name='adminprofile'),

    path('', views.login_user, name='login'),
    path('home/', views.home, name='home'),
    path('allstaff/', views.allstaff, name='allstaff'),
    path('updatestaff', views.updatestaff, name='updatestaff'),
    path('delete/<int:id>/', views.delete, name='delete'),
    path('deletephoto/<int:id>/', views.deletephoto, name='deletephoto'),
    path('deleteoutgoing/<int:id>/', views.deleteoutgoing, name='deleteoutgoing'),

    path('update/<int:id>/', views.update, name='update'),
    path('logout/', views.logout_view, name='logout'),
    path('register/', views.register_view, name='register'),
    path('edit-register/', views.edit_register_view, name='edit_register'),
    path('edit_profile/', views.edit_profile, name='edit_profile'),
    #path('ReceptionUnserviceable/', views.ReceptionUnserviceable, name='ReceptionUnserviceable'),
    path('logisticprofile', views.logisticprofile, name='logisticprofile'),
    path('outgoingLRU/', views.outgoingLRU, name='outgoingLRU'),
    path('outgoinggallery/', views.outgoinggallery, name='outgoinggallery'),
    path('gallery/', views.gallery, name='gallery'),
    path('photo/<str:pk>/', views.viewPhoto, name='photo'),
    path('viewlruphoto/<str:pk>/', views.viewlruphoto, name='viewlruphoto'),
    path('add/', views.addPhoto, name='add'),

]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
    urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns = urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

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

def outgoinggallery(request):
    user = request.user
    query = request.GET.get('q', None)
    category = request.GET.get('category', None)

    alloutgoinglru = OutgoingLRU.objects.filter(category__user=user)

    if category:
        alloutgoinglru = alloutgoinglru.filter(category__name=category)

    if query:
        alloutgoinglru = alloutgoinglru.filter(title__icontains=query)

    categories = Category.objects.filter(user=user)
    context = {'categories': categories, 'alloutgoinglru': alloutgoinglru}

    return render(request, 'Outgoing/outgoinggallery.html', context)
Вернуться на верх