我想在Django中注释新列“ is_like”

时间:2018-12-23 14:36:01

标签: django

我使用此查询集

<Queryset[<UsePoint:a>,]>
<name:a, like_users_count:3>

我的代码:

        user_exists = User.objects.filter(
            pk=self.request.user.pk,
            pk__in=OuterRef('like_users'),
        )
        queryset = queryset.annotate(is_like=Exists(user_exists))

我认为它会返回一个这样的查询集

<Queryset[<UsePoint:a>,]>
<name:a, is_like:true, like_users_count:3>

但是它返回两个查询集

<Queryset[<UsePoint:a>,<UsePoint:a>]>
<name:a, is_like:false, like_users_count:2>
<name:a, is_like:true, like_users_count:1>

我如何区分这些结果?

#model
class UsePoint(models.Model):
    name = models.CharField(
        max_length=50,
    )
    category = models.ForeignKey(
        'UsePointCategory',
        on_delete=models.CASCADE,
    )
    like_users = models.ManyToManyField(
        settings.AUTH_USER_MODEL,
        blank=True,
    )

1 个答案:

答案 0 :(得分:1)

您可以使用

user_exists = User.objects.filter(
   pk=self.request.user.pk,
   pk__in=OuterRef('like_users'),
).first()

它将返回一个对象

或者您可以使用

user_exists = User.objects.filter(
   pk=self.request.user.pk,
   pk__in=OuterRef('like_users'),
).distinct()

它将重新调整不同的对象