django嵌套模型字段访问

时间:2012-12-27 12:17:10

标签: django django-models

以下是该方案:

我有一个学生模型,主​​题领域与主题模型的多对多关系

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())并显示学生正在使用的程序名称?
是否可以,或者我需要在与模型中的多对多关系连接的学生模型中创建其他字段?

1 个答案:

答案 0 :(得分: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字段替换manyToMany字段,这两个字段在两个模型之间给出一对一的关系,这意味着这个方法应该有效:

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

(无论哪种方式,您都没有理由在学生模型和程序模型之间创建直接链接,除非您希望减少数据库调用的数量,在这种情况下您可以向Student添加一个字段使用最新的程序名称或类似名称进行更新。)

我希望我没有误解你的问题。