23

我有两个使用 ForeignKey 关联在一起的模型,并且使用了 related_name。这是一个例子。

class Student(models.Model):
    name = models.CharField(max_length=255)
    birthday = models.DateField(blank=True)


class Class(models.Model):

    name = models.CharField(max_length=255)
    student = models.ForeignKey(Student,
                                related_name='classes',
                                null=True)

    def __unicode__(self):
        return self.name

例如,我想访问类名。

这是我尝试过的。

john = Student.objects.get(username = 'john')
print john.classes.name

什么都没有打印出来。

但是当我尝试john.classes

我在 0x109911410 处得到 django.db.models.fields.related.RelatedManager 对象。这表明它们是相关的。但我想获得班级名称。

难道我做错了什么?如何使用related_name 访问类的名称?需要一些指导。

4

3 回答 3

23

是的,班级是经理。一位老师可以上几节课。所以要输出他们的名字,你应该这样做:

john = Student.objects.get(username = 'john')
for class2 in john.classes.all():
   print class2.name

如果您只想为一名学生上课,请使用一对一的关系。在这种情况下,您可以使用您的方法访问相关字段。

于 2012-08-23T08:38:09.473 回答
3

请注意:您正在定义一对多关系。因此,学生可能有多个班级,因此 john.classes.name 无法工作,因为您尚未指定要为其命名的班级。在 john.classes 中,“类”只是一个管理器,您可以像使用任何其他 Django 模型管理器一样使用它。你可以做一个 john.classes.all()(就像 sergzach propsed),也可以做 john.classes.get(...) 或 john.classes.filter(...) 之类的事情。

于 2012-08-23T08:44:53.450 回答
1

你可以这样做来访问表中的第一行

john = Student.objects.get(username = 'john')    
john.classes.all().first().name # to access first row
john.classes.all().last().name # to access last row

在上面的示例中,您不想遍历对象

它会给你第一行的类名

于 2016-09-19T07:29:20.440 回答