私は同じ会社の従業員のリストを表示しようとしています。たとえば、与えられた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 %}
クール、それは動作します、テンプレートタグの可能な結合テーブルがわかりませんでした。 Btw、応答には約5.3秒かかります。は普通? – realnot
大量のデータがある場合は、それは正常です。しかし、ページの応答時間を長くするべきではありません。ページネーションを行うか、物事を引きずる非効率的なコードがある場合は修正してください。 –
申し訳ありませんが、私はwebkit-gtk-2.4.11をコンパイルしています。ラップトップのワークロードは次のとおりです:Load avg:5.73、5.69、5.70。問題はDBからデータを取得していると思うので、CPUは負荷がかかります。通常、ページをリロードするのに2秒かかります。 – realnot