次のエンティティがあります。
- 動画
- タグ
- リレーションシップ エンティティ - VideoTags
スキーマは次のとおりです。
class Tag(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=100, unique=True)
class Meta:
db_table = u'tags'
class Video(models.Model):
guid = models.CharField(max_length=36, primary_key=True)
title = models.CharField(max_length=600)
tags = models.ManyToManyField(Tag, through='VideoTag')
class Meta:
db_table = u'videos'
class VideoTag(models.Model):
guid = models.CharField(max_length=36, primary_key=True)
tag = models.ForeignKey(Tag)
video = models.ForeignKey(Video)
weight = models.FloatField()
class Meta:
db_table = u'video_tags'
これで、エンティティを作成するときにすべてうまくいきます。ここで、ID でビデオを取得し、そのタグを反復処理したいとします。
私がする時:
video = Video.objects.get(pk=1)
tags = video.tags.all()
タグ エンティティは関連エンティティ VideoTag ではなくビデオに関連しているため、実際にはタグ エンティティのリストを取得します。ビデオのタグにアクセスしたいと思います。さらに重要なことに、関係テーブルの追加フィールドの 1 つである重みにアクセスしたいと考えています。ビデオのタグ プロパティはタグ タイプであるため、これを行うことはできません。
ありがとう :)