django-具有关系查询的搜索功能

时间:2019-03-25 05:55:40

标签: django

我正在尝试创建一个搜索功能,该功能可以返回与供应商关联的产品。在返回的每个清单中,我都希望有供应商名称,并使用供应商主键创建指向供应商页面的链接。

两个表之间的关系是在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)

2 个答案:

答案 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 %}