2016-06-04 19 views
0

dieses Problem macht mich verrückt. Ich habe ein Modell Django ORM:Django - Zugriff auf select_related Feld

class EmployeeUnique(models.Model): 
    person_unique = models.OneToOneField(PersonUnique, on_delete=models.CASCADE, primary_key=True, related_name = 'employee_unique') 
    class Meta: 
     managed = False 
     db_table = 'employee_unique' 

class PersonUnique(models.Model): 
    birthdate = models.DateField(blank=True, null=True) 

    class Meta: 
     managed = False 
     db_table = 'person_unique' 

class PersonDetails(models.Model): 
    person_unique = models.ForeignKey('person.PersonUnique', on_delete=models.CASCADE) 

    first_nm_rus = models.CharField(max_length=200) 

    class Meta: 
     managed = False 
     db_table = 'person_details' 

Vorlage:

{% for e in employee_unique_table %} 
    <tr class='clickable-row' style = 'cursor:pointer' data-href="/employee_profile_main/{{e.person_unique_id}}/"> 
     <td> 
      {% for p in e.person_unique.person_details.all %} 
       <div>{{p.first_nm_rus}}</div> 
      {% endfor %} 
     </td> 

Aussicht:

def my_view(request): 
    employee_unique_table = EmployeeUnique.objects.\ 
       prefetch_related('employee_legal_entity__employee_category', 
             'person_unique').select_related() 

Meine API Fehler nicht nachgibt, aber es wird nicht nur das Display person's first_nm_rus. Es ist leer !!!

Antwort

2

Sie haben keine Beziehung namens person_details zwischen PersonUnique und PersonDetails, ich denke, man ein related_name='person_details' zu Ihrem ForeignKey person_unique hinzufügen wollte, aber es ist atm nicht, so dass Sie das Problem lösen zu tun sollte:

person_unique = models.ForeignKey('person.PersonUnique', on_delete=models.CASCADE, related_name='person_details') 
+0

Fantastisch. Also muss ich related_name nicht nur für prefetched_related angeben, sondern auch für select_related? Ich verstehe einfach nicht, wofür diese Redundanz gemacht wird? Ich spezifiziere den Fremdschlüssel. Warum brauchen wir related_names? –

+0

'related_name' ist der Name der Relation (reverse). Wenn Sie während einer Abfrage Werte des zugehörigen Objekts abrufen möchten, müssen Sie dies mit' select_related' sagen. Weitere Informationen finden Sie hier http://stackoverflow.com/questions/ 2642613/Was-ist-verwandt-Name-verwendet-für-in-Django und https://docs.djangoproject.com/en/1.9/topics/db/queries/#backwards-related-objects – trinchet

Verwandte Themen