3

这是场景:

我有一个学生模型,其主题字段与主题模型的多对多关系相关

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

4

1 回答 1

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 添加一个字段,该字段更新为最新的程序名称或类似名称。)

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

于 2012-12-27T12:34:40.897 回答