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

Posted

技术标签:

【中文标题】Django - 分组数据并在模板中显示外键的名称【英文标题】:Django - Grouping data and showing the foreignkey's name in template 【发布时间】:2021-04-01 05:46:45 【问题描述】:

我正在尝试创建一个饼图 (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 %&lt;p&gt; dep.get_respons_display &lt;/p&gt;% endfor %

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

【问题讨论】:

你可以试试Personel.objects.values('department', 'department__name').annotate(Count('department')) 吗?您应该可以在模板中使用 dep.department__name 访问它。 感谢您的评论。你是对的。 我写它作为答案。你介意验证它吗?谢谢。 【参考方案1】:

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

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 %

【讨论】:

以上是关于Django - 分组数据并在模板中显示外键的名称的主要内容,如果未能解决你的问题,请参考以下文章

Python:如何在我的 Django 模板中传递外键的值?

如何在 Django 管理页面中显示外键的属性

将带有外键的自定义标签呈现到模板问题中

django:如何从包含外键的多个模型中制作一个表单

在 Django 模板中使用外键作为变量

Django 将带有外键的查询集转换为 JSON