Django:如何检查用户是不是已经在 ManyToManyField 上投票?

Posted

技术标签:

【中文标题】Django:如何检查用户是不是已经在 ManyToManyField 上投票?【英文标题】:Django: How to check if user has already voted on ManyToManyField?Django:如何检查用户是否已经在 ManyToManyField 上投票? 【发布时间】:2013-03-13 14:13:46 【问题描述】:
    class Punch(models.Model):
        ring            = models.ForeignKey(Ring)
        voters           = models.ManyToManyField(settings.AUTH_USER_MODEL)

    class Ring(models.Model):
        category        = xxxx

我有这个带有 ManyToManyField 的课程。

每个用户每次打卡只能投票一次。 现在我需要知道用户是否已经投票支持特定的一拳。

我该怎么做?

punch.voters.filter(??? = request.user)

阅读我想出的文档:

voters = get_user_model().objects.filter(punch__voters=request.user)

但这给了我用户为所有拳头投票的总次数。但我只对某一拳感兴趣,看看他是否投了票。

我仍在努力解决这个问题。 感谢您的帮助

【问题讨论】:

为什么是votes 而不是voters 【参考方案1】:

你可以试试这个:

punch.voters.filter(pk=request.user.pk)

您还可以将 filter 替换为 try-expect 包装的 get

【讨论】:

好极了。稍作修改即可工作:punch.voters.filter(pk=user.pk) 谢谢 这将是一个有趣的选择。不会抛出一个比过滤器更昂贵的期望吗?【参考方案2】:

可以使用查找across relationships查询多对多关系。

【讨论】:

以上是关于Django:如何检查用户是不是已经在 ManyToManyField 上投票?的主要内容,如果未能解决你的问题,请参考以下文章