2

次のエンティティがあります。

  1. 動画
  2. タグ
  3. リレーションシップ エンティティ - 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 つである重みにアクセスしたいと考えています。ビデオのタグ プロパティはタグ タイプであるため、これを行うことはできません。

ありがとう :)

4

1 に答える 1

0

Djangoのドキュメントには

メンバーシップの情報にアクセスする必要がある場合は、メンバーシップモデルに直接クエリを実行してアクセスできます。

それはまた言います

同じ情報にアクセスする別の方法は、Personオブジェクトから多対多の逆の関係を照会することです。

したがって、次のようなオプションが必要です。

VideoTag.objects.filter(video=video).order_by('weight')

または多分

Tag.videotag_set.all().order_by('weight')
于 2012-12-03T11:52:21.553 に答える