Как правильно выполнить поиск в Django?
Я совсем новичок в Django. И у меня возникла проблема с реализацией поиска. Я просмотрел довольно много материала и перепробовал множество вариантов, но ничего не вышло. Я хочу реализовать поиск так, чтобы он искал по модели товара. Вы можете помочь мне с этой проблемой?
views.py
from django.shortcuts import render
from .filters import *
from .models import index
from .forms import *
# Create your views here.
def indexViews(request):
search = request.GET['search']
indexAll = index.objects.all
if search == None:
posts = index.objects.filter(model__in=search)
else:
posts = index.objects.all()
index_filter = IndexFilter(request.GET, queryset=all)
context = {
'index_filters': index_filter,
'all': indexAll
}
return render(request, 'index.html', context)
models.py
from django.db import models
# Create your models here.
class index(models.Model):
BRAND = [
('apple', 'apple'),
('samsung', 'samsung'),
('huawei', 'huawei'),
]
brand = models.CharField(max_length=20, choices=BRAND)
model = models.CharField(max_length=50, default='None')
price = models.FloatField(max_length=10, default=0.0)
image = models.URLField()
class Meta:
verbose_name = 'Product'
verbose_name_plural = 'Products'
def __str__(self):
return self.model
urls.py
from django.urls import path
from .views import *
urlpatterns = [
path('', indexViews, name='index')
]
index.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="get" action="{% url 'index' %}">
{{ index_filters.form }}
<input type="search" placeholder="Search" name="search" class="form-control">
<button class="btn btn-sm btn-danger" type="submit">Submit</button>
</form>
{% for indexViews in index_filters.qs %}
<img src="{{ indexViews.image }}" width="200" alt="">
<div class="product">
Model: {{ indexViews.model }}
<br>Category: {{ indexViews.brand }}
<br>Price: {{ indexViews.price }} $
<br>----------------------------------
</div>
{% endfor %}
</body>
</html>
Попробуйте прочитать о Django-GCBV ListView. Больше здесь: https://docs.djangoproject.com/en/4.1/topics/class-based-views/mixins/#listview-working-with-many-django-objects
в вашем случае:
def indexView(ListView):
model = Index
def get_queryset(self, *args, **kwargs):
queryset = super().get_queryset(*args, **kwargs)
if self.request.GET.get('search'):
queryset = queryset.filter(model=self.request.GET['search'])
return queryset
def get_context_data(self, *args, **kwargs):
return super().get_context_data(*args, **kwargs) | {'index_filter': IndexFilter(self.request.GET)}