23

ForeignKeyを使用して相互に関連付けられている2つのモデルがあり、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

はい、クラスはマネージャーです。1人の教師に対して複数のクラスになる場合があります。したがって、名前を出力するには、次のようにする必要があります。

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

1人の生徒に1つのクラスのみが必要な場合は、1対1の関係を使用します。この場合、メソッドを使用して関連フィールドにアクセスできます。

于 2012-08-23T08:38:09.473 に答える
3

注意してください:あなたは1対多の関係を定義しています。したがって、学生は複数のクラスを持つことができます。したがって、名前を付けたいクラスを指定していないため、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 に答える