Запрос к базе данных для поиска постов в приложении django
Я пытаюсь добавить строку поиска в мое приложение, но я не знаю, как запросить базу данных, чтобы выдать то, что ищет пользователь. Я хочу, чтобы при поиске пользователем user в посте или category в посте model показывал результат, который ищет пользователь, как поиск на YouTube и facebook, Как я могу сделать это в django, чтобы получить то, что я хочу?
вот моя модель:
class Photo(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
category = models.CharField(max_length=30,null=True, blank=False)
image = CloudinaryField(blank=False, null=False)
description = models.TextField(null=True)
date_added = models.DateTimeField(auto_now_add=True)
phone = models.CharField(max_length=12, null=False, blank=False)
price = models.CharField(max_length=30,blank=False)
location = models.CharField(max_length=20, blank=False)
def __str__(self):
return str(self.category)
моя приборная панель:
<div class="container">
<div class="row justify-content-center">
<form action="{% url 'search' %}" method="get">
<input class="form-control me-2" type="search" placeholder="Search" aria-
label="Search">
<br>
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
</div>
</div>
<div class="container">
<div class="row justify-content-center">
{% for photo in photos reversed %}
<div class="col-md-4">
<div class="card my-2">
<img class="image-thumbail" src="{{photo.image.url}}" alt="Card image cap">
<div class="card-body">
<h2 style="color: yellowgreen; font-family: Arial, Helvetica, sans-serif;">
{{photo.user.username.upper}}
</h2>
<br>
<h3>{{photo.category}}</h3>
<h4>{{photo.price}}</h4>
</div>
<a href="{% url 'Photo-view' photo.id %}" class="btn btn-warning
btn-sm m-1">Buy Now</a>
</div>
</div>
{% empty %}
<h3>No Files...</h3>
{% endfor %}
</div>
</div>
вид:
def dashboard(request):
photos = Photo.objects.all()
context = {'photos': photos}
return render(request, 'dashboard.html', {'photos': photos} )
вид строки поиска:
def search(request):
return render(request, 'search.html')
Вы можете сделать это с помощью метода filter внутри вашего представления. Что-то вроде:
photos_filter = request.GET.get('filtered[]', False)
photos = Photo.objects.all()
if photos_filter:
photos_filter = eval(photos_filter)
if photos_filter['id'] == 'category':
payments = payments.filter(
category__icontains=payments_filter['value'])
if photos_filter['id'] == 'user':
payments = payments.filter(
user__id=payments_filter['value'])
И так далее, вы можете добавить любой фильтр, который вам нравится. А в URL вы просто добавляете
/?filtered[]=%7B%22id%22:%22category%22,%22value%22:%22Nature%22%7D
Ваш код будет видеть этот фильтр как dict obj: {'id': 'category', 'value': 'Nature'}. Таким образом, после него вы получите все фотографии с категорией nature