2012-12-27 4 views
3
여기

는 시나리오이다 프로그램 모델에 대한 다 대다 관계로 연결됩니다. Subject Model도 CharField 이름을가집니다.장고 중첩 된 모델 필드 액세스

class Programs(models.Model): 
    name = models.CharField(max_length=40) 
    (...) 

장고 대다 필드 추가 테이블을 생성 : 프로그램 모델에서

class Subject(models.Model): 
    (...) 
    program = models.ManyToManyField(Programs) 

은 내가 필드가 있습니다. 내 신청서에는 프로그램에 상응하는 프로그램 및 주제가 작성됩니다 (양식 포함). 그런 다음 일부 학생을 만들고 주제를 선택합니다. 프로그램 이름 필드 (Student.objects.all())에 액세스하고 학생이 사용하고있는 프로그램 이름을 표시하려면 어떻게합니까?
프로그램 모델과의 다 대다 관계로 연결된 학생 모델에 추가 필드를 만들어야합니까?

+0

그렇지 않습니다. 장고 모델의'through tables'를 살펴보십시오. 나는 그것이 당신이 추천하고있는 것이라고 생각합니다. – karthikr

답변

2

student.subject의 각 제목에 속한 프로그램의 프로그램 이름 목록을 반환하겠습니까?

그래서 당신이 학생 모델의 방법으로 사용할 수 있다면 :

def get_program_names(self) 
    programs = [] 
    for subject in self.subjects: 
     programs += [program.name for program in subject.program] 
    return programs 

그것은 당신이 하나의 프로그램 이름이 반환 될 것으로 예상, 그러나, 귀하의 질문에서 소리가 난다. 이 경우 다음의 경우 어쩌면이 방법은 작업을해야한다는 것을 의미, 두 모델 사이에 하나의 관계에 대한 한 줄 외래 키 필드와 manyToMany 필드를 교체해야합니다 :

def get_program_name(self): 
    return self.subject.program.name 

(어느 쪽이든, 이유가 없습니다 데이터베이스 호출 횟수를 줄이기를 원하지 않는 한 학생 모델과 프로그램 모델 사이에 직접 연결을 만들어야합니다.이 경우 학생에게 최신 프로그램 이름 등으로 업데이트 된 필드를 추가 할 수 있습니다.)

귀하의 질문에 대해 오해하지 않았 으면합니다.

+0

덕분에 그게 많이 도움이되었습니다. – Chris