2016-06-04 2 views
0

이 문제는 나를 미치게합니다.Django - select_related 필드에 액세스하는 중

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' 

템플릿 :

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

뷰가 :

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

내 오류를 생성하지 않는 API하지만 그냥 표시되지 않습니다 나는 장고 ORM 모델이 사람의 first_nm_rus. 그것은 비어 있습니다!

답변

2

는 당신은 어떤 관계가 PersonUniquePersonDetails 사이 person_details 이름이없는, 난 당신이 당신의 외래 키 person_uniquerelated_name='person_details'를 추가하고 싶었 생각하지만 문제가 일을 해결해야한다, 그래서 그것은, 기압되지 않습니다 :

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

환상적. 그래서 관련 이름을 prefetched_related뿐만 아니라 select_related로 지정해야합니까? 나는이 이중화가 무엇을 위해 만들어 졌는지 이해하지 못한다. 나는 외래 키를 지정한다. 그러면 related_names가 필요한 이유는 무엇입니까? –

+0

'related_name'은 릴레이션의 이름입니다 (리버스). 쿼리 중에 관련 객체의 값을 가져오고 싶다면'select_related'를 사용하여 알려 주어야합니다. 자세한 내용은 http://stackoverflow.com/questions/을 참조하십시오. 2642613/django 및 https://docs.djangoproject.com/en/1.9/topics/db/queries/#backwards-related-objects에 사용되는 관련 이름 – trinchet

관련 문제