Джанго Queryset много ко многим - PullRequest
0 голосов
/ 11 февраля 2019

У меня проблема с выводом запроса ManyToMany в Django

У меня есть два класса: Инвестор и Фонд.В Фонде может быть много Инвесторов, а Инвестор может быть инвестирован в несколько Фондов, следовательно, отношение Манигомани

Цель состоит в том, чтобы показать в HTML (через шаблон) список на каждого инвестора всех фондов, в которых он находится./ она вложена.

Models.py:

class Fund(models.Model):
name = models.CharField(max_length=100)

def __str__ (self):
    return self.name

class Investor(models.Model):
first_name = models.CharField(max_length = 100)
investments = models.ManyToManyField(Fund)

def __str__ (self):
    return self.first_name       

view.py:

def investors_overview(request):
 investors = Investor.objects.all()
 return render(request, 'funds/investors.html', {'investors_overview' : investors })

шаблон:

{% for investor in investors_overview %}
<p>{{investor.first_name}} </p>
<p>{{investor.investments.all}} </p>

Я быподобно выводу в качестве точных названий различных фондов, в которые инвестируется инвестор. Однако вывод в HTML не является «чистым» и выглядит следующим образом:

<QuerySet [<Fund: Fund1>, <Fund: Fund2>]>

1 Ответ

0 голосов
/ 11 февраля 2019

Вы можете повторять в течение fund с, например:

{% for investor in investors_overview.all() %}
    <p>{{investor.first_name}} </p>
    <p>
    <b>{% for fund in investor.investments %}</b>
        {{ fund }}
    <b>{% endfor %}</b>
    </p>
{% endfor %}

Вы можете повысить производительность набора запросов, используя .prefetch_related(..):

def investors_overview(request):
 investors = Investor.objects.<b>prefetch_related('investments')</b>
 return render(request, 'funds/investors.html', {'investors_overview' : investors })
...