2016-08-03 9 views
0

Ich versuche, eine Liste der Mitarbeiter anzuzeigen, die Teil desselben Unternehmens sind. Also zum Beispiel mit der gegebenen URL localhost/app/company-slug/würde ich gerne eine Liste von Zeilen anzeigen, wo die Details aller drei Modelle sind:Wie füge ich zwei Resultset/Tabelle in Django zusammen?

| Vorname | letzter_name | Firmen-Slug | angestellter_status | mitarbeiter_type |

Mit diesen Modellen, wie kann ich diese Art von Daten abrufen?

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) 

Edit 1:

Ich weiß nicht möglich war, innerhalb von Template-Tags verbinden Tabellen. Dies ist eine funktionierende Lösung von @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 %} 

Antwort

1

zu unterstützen, ich nehme an, Sie bereits ein Objekt für company in der aktuellen Seite hatten, die Mitarbeiter bekommen ist einfach:

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 über OneToOneField.

+0

Cool, es funktioniert, ich wusste nicht, war möglich Join Tabellen in Vorlage Tags. Übrigens, es dauert fast 5,3 Sekunden, um zu antworten. Ist normal? – realnot

+0

Es hängt davon ab, ob Sie eine große Datenmenge haben, ja, es ist normal. Aber Sie sollten die Seitenreaktionszeit nicht so lange machen. Entweder funktioniert die Paginierung oder, wenn Sie ineffizienten Code haben, der die Dinge herunterzieht, beheben Sie es. –

+0

Tut mir leid, ich kompiliere webkit-gtk-2.4.11 und die Arbeitsbelastung des Laptops ist: Load avg: 5.73, 5.69, 5.70. Das Problem besteht darin, Daten aus der Datenbank abzurufen, da die CPU unter Last steht. Normalerweise dauert es 2 Sekunden, um die Seite neu zu laden. – realnot

0

Haben Sie eine ansichten.py, die diese Modelle dient? Sie könnten leicht die Django render Funktion verwenden, um alle drei dieser Modelle zu dom zu dienen. Dies ist ein ziemlich umfassender, alles umfassender Prozess, aber ich würde mehr als glücklich, Ihnen

Verwandte Themen