【问题标题】:How to merge/join two resultset/table in django?如何在 django 中合并/加入两个结果集/表?
【发布时间】:2016-08-03 13:59:06
【问题描述】:

我正在尝试显示属于同一公司的员工列表。因此,例如使用给定的 URL localhost/app/company-slug/ 我想显示一个行列表,其中包含所有三个模型的详细信息:

|名字 |姓氏 |公司蛞蝓|员工状态 |员工类型 |

使用这个模型,我如何检索这种数据?

class Employee(models.Model):
    company = models.ForeignKey(Company)


class EmployeeProfile(models.Model):
    employee = models.OneToOneField(Employee)
    # Base
    first_name = models.CharField(max_length=31)
    middle_name = models.CharField(max_length=31, null=True, blank=True)


class EmployeeJob(models.Model):
    employee = models.OneToOneField(Employee)
    # Employment status
    employment_status = models.ForeignKey(EmploymentStatus, null=True, blank=True)
    employment_type = models.ForeignKey(EmploymentType, null=True, blank=True)

编辑 1:

我不知道模板标签中是否可以连接表格。这是@Shang Wang 建议的可行解决方案

{% for employee in employees %}
    <tr class="table-row clickable" data-href="{% url 'hrm:detail' company.slug employee.pk %}">
        <td><strong>A</strong></td>
        <td>{{ employee.employeeprofile.first_name }} {{ employee.employeeprofile.last_name }}</td>
        <td>{{ employee.employeejob.employment_status }}</td>
        <td>{{ employee.employeejob.employment_type }}</td>
        <td>4</td>
    </tr>
{% endfor %}

【问题讨论】:

    标签: python django join orm merge


    【解决方案1】:

    我假设您在当前页面中已经有一个company 的对象,获取员工真的很容易:

    employees = Employee.objects.filter(company=company)
    for employee in employees:
        print employee.employeeprofile.first_name
        print employee.employeeprofile.last_name
        print employee.employeejob.employment_status
        print employee.employeejob.employee_type
    

    关于OneToOneField的Django文档。

    【讨论】:

    • 酷,它有效,我不知道模板标签中是否可以连接表。顺便说一句,响应需要将近 5.3 秒。正常吗?
    • 这取决于,如果您有大量数据,是的,这很正常。但是你不应该让页面响应时间那么长。要么做分页,要么,如果你有一些低效的代码拖累了事情,修复它。
    • 对不起,我正在编译 webkit-gtk-2.4.11,笔记本电脑的工作负载是:Load avg: 5.73, 5.69, 5.70。认为问题是从数据库中检索数据导致 CPU 负载不足。通常需要 2 秒才能重新加载页面。
    【解决方案2】:

    你有为这些模型服务的views.py吗?您可以轻松地使用 django render 函数将所有这三个模型提供给 dom。这是一个相当全面、包罗万象的过程,但我很乐意为您提供帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多