Поиск на Джанго
Пишу интернет магазин. Хочу сделать поиск на джанго. Выходит ошибка: Related Field got invalid lookup: icontains Если же меняю ProductImage на Product Он работает, но результат выходит только в виде текста. (Мне нужно, чтобы было с картинкой). Подскажите пожалуйста, что делать. Совсем недавно начал изучать Python и вот застрял.
#views.py
from django.shortcuts import render
from products.models import *
from pet_shop import views
from django.views.generic import TemplateView, ListView
from django.db.models import Q
class SearchResultsView(ListView):
model = ProductImage
template_name = 'search_results.html'
def get_queryset(self):
query = self.request.GET.get('q')
object_list = ProductImage.objects.filter(
Q(product__icontains=query)
)
return object_list
#models.py
class ProductCategory(models.Model):
name = models.CharField(max_length=64, blank=True, null=True, default=None)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.name
class Meta:
verbose_name = 'Product category'
verbose_name_plural = 'Products categories'
class Product(models.Model):
name = models.CharField(max_length=64, blank=True, null=True, default=None)
price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
category = models.ForeignKey(ProductCategory, blank=True, null=True, default=None, on_delete=models.CASCADE)
short_description = models.TextField(blank=True, null=True, default=None)
description = models.TextField(blank=True, null=True, default=None)
is_active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
def __str__(self):
return self.name
class Meta:
verbose_name = 'Product'
verbose_name_plural = 'Products'
class ProductImage(models.Model):
product = models.ForeignKey(Product, blank=True, null=True, default=None, on_delete=models.CASCADE)
image = models.ImageField(upload_to='products_images/')
is_main = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
def __str__(self):
return self.id
class Meta:
verbose_name = 'Photo'
verbose_name_plural = 'Photos'
#urls.py
re_path('search/', SearchResultsView.as_view(), name='search_results'),
#search_results.html
<!-- templates/search_results.html -->
<html>
{% extends 'basic.html' %}
{% load static %}
{% block content %}
<div class="section2">
<div class="container">
<div class="row">
<h1 class="text-center">
Search results
</h1>
<ul>
{% for res in object_list %}
<li>
{{ res.product}}
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{% endblock %}
</html>