2012-12-27 209 views
3

這裏的情景:Django的嵌套模型字段訪問

我有一個學生模型與連接主題領域的許多一對多的關係,物體模型

class Student(models.Model): 
    (...) 
    subject = models.ManyToManyField(Subject) 

在主題模式,我有一個程序場與程序模型的多對多關係相關聯。主題模型也獲得了CharField名稱。

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

在程序模式,我有一個字段:

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

Django的許多到許多領域創造更多的表。在我的應用程序中,我創建了一個與程序相對應的程序和主題。然後我創建一些學生並選擇一些科目。 如何訪問程序名稱字段(Student.objects.all())並顯示學生正在使用的程序名稱?
是否有可能,或者我需要在學生模型中創建與程序模型中的多對多關係相關的其他字段?

+0

你沒有。在django模型中查看'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 

它從你的問題聽起來,不過,你期望返回只有一個程序的名字。如果是這樣的話,那麼也許你應該更換ForeignKey的領域,這給一到兩個型號之間的一個關係,你的多對多領域,這意味着這種方法應該工作:

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

(無論哪種方式,沒有任何理由除非希望減少數據庫調用次數,否則您應該在您的學生模型和程序模型之間創建一個直接鏈接,在這種情況下,您可以添加一個字段給學生,該字段用最新的程序名稱或類似名稱更新。)

我希望我沒有誤解你的問題。

+0

謝謝,這幫助了我很多 – Chris