You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django首页按公司分组展示员工姓名列表?

解决Django中按公司分组展示员工的问题

1. 修正模型关联关系

你当前的模型外键方向错误,导致一个公司只能关联单个员工。正确的关联应该是一个公司对应多个员工,调整后的模型代码如下:

# models.py
class Company(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Employee(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    comment = models.TextField()
    # 添加指向Company的外键,关联公司与员工
    company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name="employees", blank=True, null=True)

    def __str__(self):
        return f"{self.first_name} {self.last_name}"
  • related_name="employees" 允许通过company.employees直接获取该公司下的所有员工
  • blank=True, null=True 支持员工暂时不关联公司(对应你示例中的None)

2. 执行数据库迁移

修改模型后,需要更新数据库:

python manage.py makemigrations
python manage.py migrate

3. 调整视图逻辑

在视图中获取所有公司,并预加载对应员工数据(避免N+1查询问题):

# views.py
from django.shortcuts import render
from .models import Company

def companies_view(request):
    # 预加载每个公司的员工
    companies = Company.objects.prefetch_related('employees').all()
    return render(request, 'your_template_name.html', {'companies': companies})

4. 编写模板展示分组数据

在模板中遍历公司,按要求展示公司名和对应的员工列表:

<!-- templates/your_template_name.html -->
{% for company in companies %}
    <p>
        {{ company.name }} 
        [
        {% for employee in company.employees %}
            {{ employee.first_name }}{% if not forloop.last %}, {% endif %}
        {% empty %}
            None
        {% endfor %}
        ]
    </p>
{% endfor %}
  • 若公司无员工,会显示None;有员工则按逗号分隔展示姓名
  • 最终效果示例:Apple [Jessica, Matthew, Anthony],无员工时显示Apple [None]

内容的提问来源于stack exchange,提问作者Krima Trivedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:44:52