问题描述
每个人。我想在Django的Profile模型中实现“以下”功能。我有一个关系模型,我想同时加入这两个字段,以便我可以选择匹配查询的用户。
我知道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)
但是,我需要将其作为queryset返回,怎么回事?
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)