Django - 分组数据并在模板中显示外键名称

Django - Grouping data and showing the foreignkey's name in template

我正在尝试创建饼图 (chart.js)。我的目标是对部门进行分组并在饼图中按部门显示工作人数。

Models.py

class Personel(models.Model):
    name = models.CharField(max_length=30)
    surName = models.CharField(max_length=20)
    department = models.ForeignKey(DepartmentList, on_delete=models.SET_DEFAULT, default=0, related_name="PersonelDepartman")

    def __str__(self):
        return f"{self.name},{self.surName}"

    class Meta:
        db_table = "personel"
        verbose_name_plural = "Ar-Ge Personeller"

class DepartmentList(models.Model):
    name = models.CharField(max_length=50)
    def __str__(self):
        return self.name

    class Meta:
        db_table = "DepartmentList"
        verbose_name_plural = "Departman Listesi"

Views.py

def index(request):
    personel_dep = Personel.objects.values('department').annotate(Count('department'))
    context = {
        "personel_dep" : personel_dep,
    }
    return render(request, 'core/index.html',context)
>>> print(personel_dep)

>>> <QuerySet [{'department': 1, 'department__count': 5}, {'department': 2, 'department__count': 5}, {'department': 3, 'department__count': 3}, {'department': 4, 'department__count': 3}, {'department': 5, 'department__count': 3}, {'department': 6, 'department__count': 4}, {'department': 7, 'department__count': 1}]>

这对我来说没问题,我需要的就在这里。但是我不知道如何在我的模板中显示部门名称(也在图表标签中)

模板

{% for dep in personel_dep %}<p>{{ dep.department }}</p>{% endfor %}

如果我使用; personel_dep = Personel.objects.filter(rdfinisDate__isnull=True)

我可以达到模板中的名称 {% for dep in personel_respons %}<p>{{ dep.get_respons_display }}</p>{% endfor %}

我错过了什么?我认为 .values 是我的问题。在这些情况下,有什么方法可以显示部门名称或在图表标签中显示部门名称的简便方法吗?

在您看来,您可以这样查询外键:

def index(request):
    personel_dep = Personel.objects.values('department', 'department__name').annotate(Count('department'))
    context = {
        "personel_dep" : personel_dep,
    }
    return render(request, 'core/index.html',context)

然后,在您的模板中,您可以通过以下方式访问它:

{% for dep in personel_dep %}
    <p>{{dep.department__name}}</p>
{% endfor %}