我是一个完整的Newb,所以请多包涵。我以前从未使用过OOP或框架。
我正在创建一个簿记系统,我希望在其中按分类帐所属的分类显示分类帐。这是我的模型,它似乎可以工作:
class COAGroup(models.Model):
Name = models.CharField(max_length=200)
def __str__(self):
return self.Name
class Ledger(models.Model):
Name = models.CharField(max_length=200)
COAGroup = models.ForeignKey(COAGroup, on_delete=models.CASCADE)
def __str__(self):
return self.Name
我正在处理第一个视图,该视图应按它们所属的类别列出所有分类帐。例如
<h2>Some COAGroup Name</h2>
<ul>
<li>A ledger that belongs to this group</li>
<li>Another ledger that belonds to the group</li>
<li>And another</li>
</ul>
<h2>Another COAGroup</h2>
<ul>
<li>A ledger that belongs to this second group</li>
<li>Another ledger</li>
</ul>
我在views.py中写了以下视图:
def showledgers(request):
COAGroups = COAGroup.objects.all()
Ledgers = Ledger.objects.all()
context = {
"COAGroups":COAGroups,
"Ledgers":Ledgers,
}
return render(request,"ListLedgers.html",context)
我已经设法将分类帐显示在ListLedgers.html中,但是我无法弄清楚如何按照我的示例将其分类为COA Group列出。
谢谢!
答案 0 :(得分:0)
您认为,您最好.prefetch_related(..)
[Django-doc]相关的def showledgers(request):
COAGroups = COAGroup.objects.prefetch_related('ledger')
context = {
'groups': COAGroups,
}
return render(request, 'ListLedgers.html', context)
:
COAGroups
然后在模板中,您可以遍历.ledger_set
,对于每个这样的组,也可以遍历相关的{% for group in groups %}
<h2>{{ group.Name }}</h2>
<ul>
{% for ledger in group.ledger_set.all %}
<li>{{ ledger.name }}</li>
{% endfor %}
</ul>
{% endfor %}
:
name
注意:通常Django模型中的字段名称是用 snake_case 而不是 PerlCase 编写的,因此应为:{ {1}}代替
。Name