如何在带有外键的模型上在 Django 中实现连接查询

How to implement a join query in django on a model with foreign keys

各位。我想在 Django 中的 Profile 模型上实现一个“跟随”功能。我有一个关系模型,我想加入这两个字段,这样我就可以 select 处理查询的用户。

我知道 peewee,我将执行以下操作:

def following(self):
    return ( User.select().join(Relationship, 
            on=Relationship.to_user).where(Relationship.from_user == self))

但我一直无法找到如何在 Django 中进行连接查询。
这是我在 models.py

上的模型
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    joined_at = models.DateTimeField()

    class Meta:
        ordering = ['-joined_at']

    def __str__(self):
        return f'{self.user.username} profile' 

    def following(self):
        """ I want to implement the query here. """

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

你可以试试这个;

def following(self):
    """ return list objects of User followings """
    return Relationship.filter(from_user=self.user)\
                       .values_list('to_user', flat=True)

但是,我需要return它作为查询集,如何?

def following(self):
    """ this will return as `User` queryset """
    user_ids = Relationship.filter(from_user=self.user)\
                           .values_list('to_user_id', flat=True)
    return User.objects.filter(id__in=user_ids)