2016-08-03 17 views
0

私は同じ会社の従業員のリストを表示しようとしています。たとえば、与えられたURLのlocalhost/app/company-slug /で、3つのモデルの詳細がある行のリストを表示したいとします。djangoで2つの結果セット/テーブルをマージ/結合するには?

| first_name | last_name |会社スラッグ| 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 %} 

答えて

1

を支援するよりも幸せになるだろう:

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 

Django doc約OneToOneFieldです。

+0

クール、それは動作します、テンプレートタグの可能な結合テーブルがわかりませんでした。 Btw、応答には約5.3秒かかります。は普通? – realnot

+0

大量のデータがある場合は、それは正常です。しかし、ページの応答時間を長くするべきではありません。ページネーションを行うか、物事を引きずる非効率的なコードがある場合は修正してください。 –

+0

申し訳ありませんが、私はwebkit-gtk-2.4.11をコンパイルしています。ラップトップのワークロードは次のとおりです:Load avg:5.73、5.69、5.70。問題はDBからデータを取得していると思うので、CPUは負荷がかかります。通常、ページをリロードするのに2秒かかります。 – realnot

0

これらのモデルを提供するviews.pyはありますか? django render関数を使用して、3つのモデルのすべてをdomに提供することができます。私はすでに、現在のページにcompanyのオブジェクトを持っていた、従業員を得ることは本当に簡単であると仮定し、これはかなり包括的な、すべての包括的なプロセスですが、私はあなたに

関連する問題