【问题标题】:django nested models field accessdjango 嵌套模型字段访问
【发布时间】:2012-12-27 12:17:09
【问题描述】:

这是场景:

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

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

【问题讨论】:

  • 你没有。浏览 django 模型中的through tables。我想这就是你所指的。

标签: django django-models


【解决方案1】:

您是否希望返回属于 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 添加一个字段更新为最新的程序名称或类似名称。)

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

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 2016-09-08
    • 2021-09-15
    • 1970-01-01
    • 2013-03-16
    • 2017-12-15
    • 1970-01-01
    • 2010-12-25
    • 2014-02-09
    相关资源
    最近更新 更多