2014-01-06 4 views
0

두 개의 테이블 인 School and Scores에 공통적으로 'psid'열이 있습니다. 각 테이블의 데이터를 내 앱으로 가져옵니다. ForeignKey를 통해 두 테이블을 함께 연결하고자합니다 (하나의 학교에 대해 여러 개의 점수가있을 수 있습니다).가져온 테이블 데이터의 Django ForeignKey

현재 내 models.py은 다음과 같습니다 : 나는 모두가 원래의 테이블에서 PSID 열을 가져 오기 및 점수를 연결하는 외래 키 필드를 가지고 할 수 있도록

class School(models.Model): 
    psid = models.CharField(primary_key=True, max_length=5) 
    city = models.CharField(max_length=100) 

class Score(models.Model): 
    psid = models.ForeignKey(School, max_length=5, db_column='psid') 
    scores = models.IntegerField(max_length=2) 

내가 점수에서 추가 필드가 필요하십니까 'psid'열을 통한 학교?

도움을 주시면 감사하겠습니다.

+0

혼란 스러워요. 관련된 학교 개체 psid 값을 가져 오거나 학교 psid 열과 관련이없는 psid라는 각 Score 개체에 대해 다른 독립 필드를 갖기를 원하십니까 (btw 클래스 이름은 복수형이 아니어야합니다)? – yuvi

+0

안녕하세요 yuvi, 예 점수가 단수 여야합니다. 나는 그것을 수정하기 위해 질문을 편집했다. 내 목표는 psid 값으로 학교 개체를 가져올 수 있습니다. 내 템플릿에는 각 학교의 점수가 표시됩니다. – wsvincent

+0

왜 다른 분야가 필요하다고 생각하십니까? –

답변

1

django 모델은 대부분 뒤에서 테이블 연결을 처리합니다. ForeignKey 필드 유형을 사용하면이 작업을 수행 할 수 있습니다. 그런 다음 ORM을 사용하여 쿼리의 테이블을 조인하면됩니다. 여기에 당신이 찾고있는 무엇을 나는 나의 가장 좋은 해석을 기반으로 테이블을 설정하는 것이 방법입니다

from django.db import models 


class School(models.Model): 
    psid = models.CharField(primary_key=True, max_length=5) 
    city = models.CharField(max_length=100) 

    def __unicode__(self): 
     return u"{0} ({1})".format(self.psid, self.city) 


class Score(models.Model): 
    school = models.ForeignKey(School, null=False, db_column="psid") 
    score = models.IntegerField() 

    def __unicode__(sefl): 
     return u"Score({0}, {1})".format(self.school.psid, self.score) 

그런 다음 모델을 테스트하기 :

$ ./manage.py syncdb 
$ ./manage.py shell 
>>> from schools.models import School, Score 
>>> school1 = School(psid="S1", city="Springfield") 
>>> school1 
S1 (Springfield) 
>>> school1.save() 
>>> School.objects.get(psid="S1") 
S1 (Springfield) 
>>> school2 = School(psid="S2", city="Springfield") 
>>> school2.save() 
>>> score1 = Score(school=school1, score=3) 
>>> score1 
Score(S1, 3) 
>>> score1.school.psid 
S1 
>>> score2 = Score(school=school1, score=2) 
>>> score3 = Score(school=school2, score=5) 
>>> score1.save() 
>>> score2.save() 
>>> score3.save() 
>>> school1.score_set.all() 
[Score(S1, 3), Score(S1, 2)] 
>>> school2.score_set.all() 
[Score(S2, 5)] 
>>> Score.objects.all() 
[Score(S1, 3), Score(S1, 2), Score(S2, 5)] 
>>> Score.objects.filter(school__psid="S1") 
[Score(S1, 3), Score(S1, 2)] 

나는 그것이 당신을 도움이되기를 바랍니다.

+0

이것은 매우 유용합니다. 나는 쉘 코드를 여러 번 사용했고 그 점이 나를 위해 굳건히했다. 다행히도 다른 사람들에게도 도움이되기를 바랍니다. – wsvincent

+0

어떤 이유로 나는 두 테이블에 대한 데이터를 대량으로 가져 왔을 때 ForeignKey가 작동한다는 것을 "신뢰하지"않았으며, 내가 보여준 것처럼 쉘을 스스로 수행하는 것이 불편했습니다. 그래서 나는 두 테이블 모두에서 'psid'가 필요하다고 생각했습니다. 간단히 'psid'를 '점수'로 설정하면 좋습니다 (장고 문서가 조언하는대로) 가야합니다. 이것을 해명 할 시간을내어 다시 한번 감사드립니다. – wsvincent