如何在带有外键的模型上在 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)
各位。我想在 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)