我有一个人,其中有User
的外键:
p = Personne.objects.get(user=self.request.user)
此人通过模型PersonneRelation
拥有“朋友”,其中有src
个人和dst
个人,因此我正在检索所有此人的朋友:
friends = [a.dst.pk for a in PersonneRelation.objects.filter(src=p)]
我有一个模型Travel
,它嵌入了旅行的描述。我还有一个模型“活动”,这是朋友当前用户所做的活动(Activite
)。所以这就是我检索与当前用户相关的所有活动的方式:
context['activites'] = Activite.objects.filter(
Q(travel__personne__pk__in=friends) | Q(relation__src__pk__in=friends),
)
一切正常。我还有一个模型PersonneLiked
,如果你喜欢Activite
,那么你就是精确的。因此,此模型具有Activite
的外键。
class PersonneLiked(models.Model):
src = models.ForeignKey('Personne', related_name='liked_src')
dst = models.ForeignKey('Personne', related_name='liked_dst')
activite = models.ForeignKey('Activite', related_name='liked_activite')
# liked = thumb added *OR* removed :
liked = models.BooleanField(default=True)
我应该采取哪些代码来检索PersonneLiked
的所有context['activites']
?这就像在SQL中创建OUTER JOIN
,但我不知道如何用Django做到这一点。
答案 0 :(得分:0)
由于context['activities']
是相应Activite
个对象的查询集,因此您可以这样做:
PersonneLiked.objects.filter(activite__in=context['activities'])
(请注意,如果这是一个M2M关系而不是ForeignKey,则此方法会在您的最终查询集中创建重复的条目。)