Я пытаюсь создать функцию поиска, которая возвращает товары, связанные с поставщиком. В каждом возвращаемом листинге я хотел бы указать имя поставщика и создать ссылку на страницу поставщика, используя первичный ключ поставщика.
Отношение между обеими таблицами создается в vendor_id
как внешний ключ, указывающий на таблицу поставщиков.
В идеале в выводе я мог бы сделать что-то вроде:
{% for product in products %}
{{product.title}} <br />
{{product.description}} <br />
<a href="{% url 'vendor' vendor.id %}">{{vendor.name}}</a>
{% endfor %}
Я могу получить всех поставщиков, но это кажется неэффективным, и я не уверен, как установить отношения между поставщиком, который «владеет» продуктом в этом цикле цикла. Я видел сообщение на select_related
, но у меня это не сработало, и кажется, что оно используется с objects.get
вместо objects.filter
Вот мои функции поиска, определенные в view.py
def search(request):
queryset_list = Products.objects.order_by('id')
if 'keywords' in request.GET:
keywords = request.GET['keywords']
if keywords:
queryset_list = queryset_list.filter(description__icontains=keywords)
context = {
'products': queryset_list
}
return render(request, 'products/search.html', context)
модели (продукты)
class Products(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
vendor = models.ForeignKey(Vendors, on_delete=models.CASCADE)
модели (поставщик)
class Vendors(models.Model):
uid = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.CharField(max_length=200)