Django查询喜欢其他用户的用户

2024-06-28 11:14:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django模型,看起来像这样:

class Matches(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    voter = models.ForeignKey(User, related_name='given_vote', on_delete=models.CASCADE)
    vote = models.BooleanField(default=False)

我正试图用django的ORM编写一个查询,但是被卡住了。给定一个用户(比如说用户1),我想返回所有的行,其中用户1对另一个用户(比如说用户2)投票为真,用户2对用户1投票为真。你知道吗

我想我可能需要使用Django的Qfunction,但不确定。我得到的是:

class User:
    def calculate_matches(self):    
        return Matches.objects.filter(Q(voter=self, vote=True) & Q(user=self, vote=True))

Tags: django用户selfonmodels投票deleteclass
2条回答

我想应该是这样的:

class User:
    def calculate_matches(self):    
        return Matches.objects.filter(Q(voter=self) | Q(user=self),  vote=True)

也就是说,它将返回投票者是用户本人或其他人投票给他时他是用户的所有匹配。你知道吗

考虑将ID为1的用户投票给ID为2的用户,反之亦然。 那么相关的sql

SELECT "users_matches"."id", "users_matches"."user_id", "users_matches"."voter_id", "users_matches"."vote" FROM "users_matches" WHERE ("users_matches"."vote" = True AND "users_matches"."voter_id" = 1 AND "users_matches"."user_id" = 2 AND "users_matches"."vote" = True)

你试过的Django ORM看起来不错。你知道吗

Matches.objects.filter(Q(voter=1, vote=True) & Q(user=2, vote=True))

请包括更多的信息,如果你没有得到确切的输出,请说明输出你期望与样本输出。你知道吗

相关问题 更多 >