猿问

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

我想获取信息:如果请求用户对该项目进行投票。


我的项目类:


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')


LEATH
浏览 144回答 2
2回答

慕沐林林

我解决了这个问题。queryset = queryset.annotate(user_vote=Count("votes__user_id", filter=Q(votes__id=filters['user_id'])))我不知道 votes__id 在这种关系中等同于用户 ID

互换的青春

尝试在投票字段上使用相关名称:votes = models.ManyToManyField(User, related_name='projects') 这样你就可以访问用户通过这个投票的所有项目 related_nameuser = User.objects.filter(username='john')user.projects.all() # > all projects that user voted for
随时随地看视频慕课网APP

相关分类

Python
我要回答