【问题标题】:Django filter intermediary table & social mediaDjango过滤中介表和社交媒体
【发布时间】:2015-12-13 21:37:19
【问题描述】:

所以我在一个社交媒体网站上练习 django(只是为了练习)。我正在尝试在我的视图中进行过滤,以从与我成为朋友的用户那里获取所有“节拍”。我使用中间表来表示“关系”。我目前正在使用以下方式获取我的 Beat Stream:

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

但我试图在关系模型中只获取与我“相关”的人的节拍。

型号:

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']

【问题讨论】:

    标签: django django-models django-forms django-templates django-views


    【解决方案1】:

    你应该这样做:

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

    【讨论】:

      猜你喜欢
      • 2014-02-24
      • 1970-01-01
      • 2014-10-12
      • 2020-03-03
      • 2019-06-10
      • 2018-01-09
      • 2016-06-29
      • 1970-01-01
      • 2012-06-05
      相关资源
      最近更新 更多