Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中正确使用相关的_名称_Python_Django - Fatal编程技术网

Python 在Django中正确使用相关的_名称

Python 在Django中正确使用相关的_名称,python,django,Python,Django,我有两个模型,使用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 =

我有两个模型,使用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对象。这表明它们是相关的。但是我想知道类名


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

是的,班级是经理。一个老师可以上几节课。因此,要输出它们的名称,您应该执行以下操作:

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

如果你只想让一个学生上一节课,那么就使用一对一的关系。在这种情况下,您可以使用方法访问相关字段。

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

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

john = Student.objects.get(username = 'john')    
john.classes.all().first().name # to access first row
john.classes.all().last().name # to access last row
在上面的示例中,您不希望迭代对象


它将在第一行为您提供类的名称

每个子类只有一个类。那么为什么john.classes.name不起作用呢?您的解决方案是可行的,但您想知道为什么john.classes.name不起作用吗?因为ForeignKey为一个孩子而不是一个孩子创建多个类。如果您只需要一个类,请使用onetoone字段。@lakesh我已更改了答案。另一个问题:由于类的unicode返回self.name,我如何使用它?它不能与相关的_名称一起使用?如果可能,我该怎么做?