我正在尝试创建一个搜索功能,该功能可以返回与供应商关联的产品。在返回的每个清单中,我都希望有供应商名称,并使用供应商主键创建指向供应商页面的链接。
两个表之间的关系是在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)
答案 0 :(得分:1)
您可以通过模板中的 product.vendor.id
访问相应产品的供应商
试试这个,
{% for product in products %}
{{product.title}} <br />
{{product.description}} <br />
<a href="{% url 'vendor' product.vendor.id %}">{{product.vendor.name}}</a>
{% endfor %}
答案 1 :(得分:1)
您可以这样做
{% for product in products %}
{{product.title}} <br />
{{product.description}} <br />
<a href="{% url 'vendor' product.vendor.id %}">{{product.vendor.name}}</a>
{% endfor %}