Django 过滤器中介 table 和社交媒体

Django filter intermediary table & social media

所以我在一个社交媒体网站上练习 Django(只是为了练习)。我正在尝试在我的视图中进行筛选,以从我的朋友那里获取所有 "Beats"。我正在为 "relationships" 使用中介 table。我目前正在使用以下方式获取我的 Beat Stream:

my_stream = Beat.objects.filter(artist=user)

但我试图只获取关系模型中我 "related_to" 的人的节奏。

型号:

class Beat(models.Model):
    created_at = models.DateTimeField( default=datetime.now)
    title = models.CharField(max_length=255)
    description = models.TextField(blank=True, null=True)
    likes = models.IntegerField(default=0)
    artist = models.ForeignKey(User, null=True, blank=True)
    beat_cover = models.ImageField(null=True, blank=True);
    admin_name = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        ordering = ['-created_at']

    def __unicode__(self):
        return unicode(self.admin_name)

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    admin_name = models.CharField(default="beat",max_length=255,blank=True, null=True)

    def __unicode__(self):
        return unicode(self.admin_name)

class Relationship(models.Model):
    from_user = models.ForeignKey(User, related_name="relationships")
    to_user = models.ForeignKey(User, related_name="related_to")

    class Meta:
        index_together = ['from_user','to_user']

你应该这样做:

related_users = Relationship.objects.filter(from_user=user) \
                                    .values_list('to_user', flat=True).distinct()
my_stream = Beat.objects.filter(artist__in=related_users)