django 按项目所属类别列出项目

mi7gmzs6  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(132)

我是一个完全的新手,所以请容忍我。我从来没有使用过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

我正在处理我的第一个视图,它应该按它们所属的类别列出所有分类帐。Eg

<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组列出,因为我的例子。
谢谢你,谢谢!

6za6bjd0

6za6bjd01#

在你看来,你最好已经**.prefetch_related(…)**[Django-doc]相关的Ledger s:

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 %}

注意:通常Django模型中字段的名称是用 snake_case 而不是 PerlCase 写的,所以应该是:name而不是Name

相关问题