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 客户是不是已经拥有特定卡