2013-09-22 3 views
1

그래서 장고를 배우고 장고 ORM 함수를 사용하여 외래 키로 값을 가져 오려고합니다. User table (기본 Django auth_user 시스템 테이블)과 student_id, user_id (FK) 및 nr_indeksu (학생 고유 정보에 대한 추가 정보가 들어있는 번호)가 포함 된 Student Table의 두 가지 테이블이 있습니다.Django 외래 키 QuerySet (join)

class Student(models.Model): 
    user = models.ForeignKey(User) 
    nr_indeksu = models.BigIntegerField() 

    def __unicode__(self): 
     return unicode(self.user 

사용자 모델을 통해 nr_indeksu를 가져 오려고합니다. 내가 select_related() 함수를 사용하여 시도했다

SELECT nr_indeksu FROM auth_user 
INNER JOIN courses_student on auth_user.id = courses_student.user_id; 

: 즉 (검색어 세트 사용)이 쿼리 실행

u = User.objects.select_related().get(pk=2) 

하지만을 나는 nr_indeksu에 액세스하려고하면

u.nr_indeksu 

를 내가 User 객체에 아무런 속성이 없다는 오류가 발생했습니다. nr_indeksu가 Student 모델이지만 사용자가 가져올 수 없으므로 의미가 있습니다.

답변

3

ForeignKey는 일대 다 관계라는 것을 기억하십시오. 각 학생마다 많은 사용자가 있습니다. 사용자 개체에서 user_obj.student_set.all()을 실행하여 관련 학생에게 액세스 할 수 있습니다.

user_obj.student_set.all() 

그러나, related_name 속성 모델과 - : 당신은 역 외래 키 조회를해야 할 때 다니엘의 대답에 추가

0
s = Student.objects.get(user__id=2) 

s.nr_indeksu 
+0

JOIN 및 FK 관계를 사용하여 사용자 모델에서 nr_indeksu를 가져오고 싶습니다. 대답은 간단합니다. 학생 모델 – Malyo

+1

에서 선택 하시겠습니까? 아니요. 'user__id = 2'는'Select * from USER where user_id = 2;'를 의미합니다. 하위 쿼리와 같습니다. – sachitad

+0

알겠습니다, 고마워요.하지만 여전히 사용자 객체의 학생 속성에 액세스하고 싶습니다. – Malyo

1

, 당신은 또한 지금, related_names을 사용할 수 있습니다, 당신은 쓸 필요가 과 같습니다 -

class Student(models.Model): 
    user = models.ForeignKey(User, related_name='studentuser') 
    nr_indeksu = models.BigIntegerField() 

    def __unicode__(self): 
     return unicode(self.user 

을 한 후 역방향 조회를 위해, 당신은 쓸 필요가 : -

user_obj.studentuser.all() 

기본적으로 말하자면, related_name 속성을 전달하여 역방향 조회를위한 자신의 이름을 제공 할 수 있습니다. 일반적으로 django에서 사용하는 기본 이름 인 <foreign_key_name>_set (예 : 귀하의 경우에는 student_set입니다.