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 上投票?的主要内容,如果未能解决你的问题,请参考以下文章

在 django python 中添加新卡之前,我如何检查 Stripe 客户是不是已经拥有特定卡

Django JWT Auth 和 Vue:如何检查用户是不是登录 Vue?

如何在 Django 中创建和链接多对多表?

检查元素是不是在模型中 - Django 模板

检查请求的用户是不是是 django 中的所有者

我们如何知道用户是不是仍然在使用 VUE/Django/JWT?