2012-12-27 161 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