Django 明显不与 Postgres 一起工作

Django distinct not working with Postgres

我正在配置 API 来提取结果列表。这些物品是衣服'Products',其中有几件'Variations'。

我正在尝试使用 distinct 来确保查询集只有 returns 独特产品的列表 - 而不是由于许多变化而重复多次的相同产品.

过去,我对产品的主键 (id) 使用了 distinct。但是,下面的代码不起作用。

当我尝试使用 "distinct" 时出现 500 错误。没有它-我没有错误。我无法在本地进行测试,因为 SQLite 不喜欢 distinct。我正在使用

class InternalListView(APIView):

    renderer_classes = (JSONRenderer, )

    def get(self, request, *args, **kwargs):

        filters = {}
        for key, value in request.GET.items():
            key = key.lower()
            if key in countmatch:
                lookup, val = internalmatch[key](value.lower())
                filters[lookup] = val

        qset = (
            Product.objects
            .filter(**filters)
            .distinct('id')
            .order_by('-rating')
            .values('name', 'brand', 'rating')
            .annotate(
                price=F('variation__price__price'),
                id=F('pk'),
                vari=F('variation'),
            )
        )

        for i in qset:
            i['likes'] = random.randint(500, 1000)

        print qset

        return Response(qset.all())

啊,刚想通了。

根据 django 文档 (https://docs.djangoproject.com/en/1.9/ref/models/querysets/#distinct)

两者不同且 order_by 必须相同。

所以这不起作用:

        .distinct('id')
        .order_by('-rating')

但这会起作用:

        .distinct('id')
        .order_by('id')

这最有效:

        .distinct('rating', 'id')
        .order_by('-rating')

使用选项 3 有什么问题吗?