为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取对象和多对多对象信息

如何获取对象和多对多对象信息

LEATH 2021-08-14 16:08:01
我想获取信息:如果请求用户对该项目进行投票。我的项目类:class Project(TimestampedModel):    title = models.CharField(max_length=120)    description = models.TextField()    company = models.ForeignKey(        Company, on_delete=models.CASCADE    )    tags = models.ManyToManyField(Tag)    votes = models.ManyToManyField(User)我的查询,我尝试通过在内部进行注释和过滤来获取它,但不起作用  queryset = Project.objects.all()        if 'title' in filters.keys() and filters['title'] is not None:            queryset = queryset.filter(title__icontains=filters['title'])        queryset = queryset.annotate(num_votes=Count("votes"))        queryset = queryset.annotate(user_vote=Count("votes__user_id", filter=Q(votes__user_id=filters['user_id'])))        queryset = queryset.order_by('-created_at')
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

我解决了这个问题。

queryset = queryset.annotate(user_vote=Count("votes__user_id", filter=Q(votes__id=filters['user_id'])))

我不知道 votes__id 在这种关系中等同于用户 ID


查看完整回答
反对 回复 2021-08-14
?
互换的青春

TA贡献1797条经验 获得超6个赞

尝试在投票字段上使用相关名称:


votes = models.ManyToManyField(User, related_name='projects') 这样你就可以访问用户通过这个投票的所有项目 related_name


user = User.objects.filter(username='john')

user.projects.all() # > all projects that user voted for


查看完整回答
反对 回复 2021-08-14
  • 2 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信