首页 > 解决方案 > 为什么 Django QuerySet 返回的值比数据库中的对象数(重复对象)多?

问题描述

我正在尝试使用 Django 运行复杂的查询。下面的查询应该返回一个有序的查询集,其中资源最多的用户以及包含与“common_tags”列表中相同标签的资源应该显示在顶部。

代码如下:

    is_in_query = Q(resources__tags__name__in=common_tags)
    is_not_in_query = ~Q(resources__tags__name__in=common_tags)

    #All user count is used to compare number of objects
    all_user_count = User.objects.filter(is_private=False)

    #len(qs_full) should equal len(all_user_count)
    qs_full = (User.objects.filter(is_private=False).annotate(count_resources=Count('resources'))
    .annotate(
    search_type_ordering=Case(
    When(Q(count_resources__gte=6) & is_in_query, then=1),
    When(Q(count_resources__gte=3) & Q(count_resources__lte=5) & is_in_query, then=2),
    When(Q(count_resources__gte=0) & Q(count_resources__lte=2) & is_in_query, then=3),
    When(Q(count_resources__gte=3) & is_not_in_query, then=4),
    When(Q(count_resources__gte=0) & Q(count_resources__lte=2) & is_not_in_query, then=5),
    default=6,
    output_field=IntegerField(),
    ))
    .order_by('-search_type_ordering',)
    )

问题:

len(all_user_count) 的输出为 104。 len(qs_full) 的输出为 128。

qs_full 中有重复项。我不知道为什么。

标签: pythondjangopostgresqlormdjango-queryset

解决方案


推荐阅读