Django Queryset多对多

时间:2019-02-11 20:32:06

标签: django django-queryset manytomanyfield

我在Django中的ManyToMany查询的输出中遇到问题

我有两节课:投资者和基金。一个基金可以有多个投资者,而一个投资者可以投资多个基金,因此存在多人关系

目标是通过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 :(得分:1)

您可以在fund迭代,例如:

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

您可以使用.prefetch_related(..)来提高查询集的性能:

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