2012-12-03 190 views
2

我有以下實體:Django的許多一對多查詢關係的實體

  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' 

現在,這一切運作良好w母雞創建實體。現在說我想通過它的Id拖動視頻並遍歷它的標籤。

當我這樣做:

video = Video.objects.get(pk=1) 
tags = video.tags.all() 

我其實獲取標記實體的名單,因爲它們都涉及到視頻,而不是關係的實體VideoTag。我想訪問視頻的標籤,更重要的是訪問關係表上的其他字段之一 - 重量。我無法這樣做,因爲視頻上的標籤屬性的類型爲標籤。

謝謝:)

回答

0

Django documentation

如果您需要訪問一個成員的信息,您可以直接查詢會員制模式做到:

它還說

訪問相同信息的另一種方法離子是通過查詢許多一對多反向關係,從一個Person對象:

所以,你必須選擇,是這樣的:

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

或許

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