django - функция поиска с реляционным запросом - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь создать функцию поиска, которая возвращает товары, связанные с поставщиком. В каждом возвращаемом листинге я хотел бы указать имя поставщика и создать ссылку на страницу поставщика, используя первичный ключ поставщика.

Отношение между обеими таблицами создается в 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 ]

1 голос
/ 25 марта 2019

вы можете сделать что-то вроде этого

{% for product in products %}
    {{product.title}} <br />
    {{product.description}} <br />
    <a href="{% url 'vendor' product.vendor.id %}">{{product.vendor.name}}</a>
{% endfor %}
1 голос
/ 25 марта 2019

Вы можете получить доступ к продавцу соответствующего продукта по 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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...