我有两个使用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
我得到django.db.models.fields.related.RelatedManager对象,地址为0x109911410。这表明它们是相关的。但我想得到班级名称。
我做错了吗?如何使用related_name访问类的名称?需要一些指导。
答案 0 :(得分:18)
是的,班级是经理。一个老师可以是几个班级。所以要输出他们的名字,你应该这样做:
john = Student.objects.get(username = 'john')
for class2 in john.classes.all():
print class2.name
如果您只想为一个学生开设一个班级,那么请使用一对一的关系。在这种情况下,您可以使用您的方法访问相关字段。
答案 1 :(得分:3)
请注意:您正在定义一对多的关系。因此,学生可能有多个类,因此john.classes.name无法工作,因为您尚未指定要具有该名称的类。在john.classes中,“classes”只是一个可以像任何其他Django Model Manager一样使用的管理器。你可以做一个john.classes.all()(比如sergzach propsed),还有像john.classes.get(...)或john.classes.filter(...)这样的东西。
答案 2 :(得分: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
在上面的示例中,您不想迭代对象
它将为您提供第一行中类的名称