如何在django中合并/连接两个结果集/表?

时间:2016-08-03 13:59:06

标签: python django join orm merge

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

| first_name | last_name | company-slug | employee_status | employee_type |

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

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

2 个答案:

答案 0 :(得分: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 doc。

答案 1 :(得分:0)

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