Строка поиска для django
У меня есть страница, на которой сотрудники могут видеть введенный ими персонал, но если списки становятся слишком длинными, трудно найти то, что они хотели, следовательно, я хочу создать строку поиска и кнопку, чтобы они могли легко искать материал и отображать его в форме карточки, как показано ниже, как мне это сделать?
Вот как выглядит мой сайт (в url он показывает q=76464, но он просто не отображает q=76464)
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)