Django 查询集多对多
Django Queryset many to many
我对 Django 中 ManyToMany 查询的输出有疑问
我有两个类:投资者和基金。一个基金可以有多个投资者,一个投资者可以投资多个基金,因此多对多关系
objective 将在 HTML 中(通过模板)显示每个投资者的列表,列出 he/she 投资的所有基金。
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 中的输出不是 "clean",如下所示:
<QuerySet [<Fund: Fund1>, <Fund: Fund2>]>
您可以迭代 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 })
我对 Django 中 ManyToMany 查询的输出有疑问
我有两个类:投资者和基金。一个基金可以有多个投资者,一个投资者可以投资多个基金,因此多对多关系
objective 将在 HTML 中(通过模板)显示每个投资者的列表,列出 he/she 投资的所有基金。
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 中的输出不是 "clean",如下所示:
<QuerySet [<Fund: Fund1>, <Fund: Fund2>]>
您可以迭代 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 })