【问题标题】:Django Many-To-Many query relationship entityDjango 多对多查询关系实体
【发布时间】:2012-11-20 20:18:35
【问题描述】:

我有以下实体:

  1. 视频
  2. 标签
  3. 关系实体 - 视频标签

这是架构:

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。我想访问视频的标签,更重要的是关系表上的额外字段之一 - 权重。我不能这样做,因为视频上的 tags 属性是 Tag 类型。

谢谢:)

【问题讨论】:

    标签: python django many-to-many querying


    【解决方案1】:

    Django documentation

    如果您需要访问会员信息,您可以通过直接查询 Membership 模型来实现:

    它也说

    访问相同信息的另一种方法是从 Person 对象查询多对多反向关系:

    所以你必须选择,比如:

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

    或许

    Tag.videotag_set.all().order_by('weight')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 2011-11-13
      • 2016-12-15
      • 1970-01-01
      • 2014-07-14
      • 2021-03-07
      相关资源
      最近更新 更多