洋人在江的麻烦

2024-06-28 11:38:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的模型:

class Subject(models.Model):
    name = models.CharField(unique=True, ...)

class Curriculum(models.Model):
    name = models.IntegerField(unique=True, ...)
    subjects = models.ManyToManyField(Subject)

class Grade(models.Model):
    name = models.CharField(unique=True,...)
    curriculum = models.ForeignKey(Curriculum, ...)

如果我知道具体的年级实例的名称,我怎样才能得到科目表,通过课程与成绩挂钩。我尝试过如下方法:

^{pr2}$

但收到了一个例外

django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist: Grade has no curriculum.

我做错什么了?在


Tags: name模型truemodelmodelscurriculumclasssubject
3条回答

如果您的数据库中有一个名为Grade的对象。然后可以使用以下方法进行筛选:

obj = Grade.objects.get(name=grade)
# access curriculum
obj.curriculum
# get subjects
obj.curriculum.subjects.all()

您要做的是用name=grade创建Grade的实例。但这还不在数据库中,而且您没有设置curriculum属性。所以你得到了RelatedObjectDoesNotExist。在

grade = Grade.objects.get(id=id) # grade instance
curriculum = grade.curriculum # curriculum is a Foreign Key
subjects = curriculum.subjects.all() # subjects is a ManyToManyField
for subject in subjects:
    print subject # each subject of curriculum

您不能使用以下行访问现有的Grade

curriculum = Grade(name=grade).curriculum

您正在创建一个新的Grade-对象,它的值为grade。这不是你想要的。在

使用

^{pr2}$

使用现有对象。在

如果要创建一个新对象,则必须在访问任何相关对象之前保存它。在

相关问题 更多 >