簡體   English   中英

Django獨特不與Postgres一起使用

[英]Django distinct not working with Postgres

我正在配置一個API以提取結果列表。 這些項目是服裝“產品”,具有多個“變體”。

我正在嘗試使用distinct確保查詢集僅返回唯一產品列表,而不是由於許多變化而多次重復同一產品。

過去,我在產品的主鍵(id)上使用了distinct。 但是,以下代碼不起作用。

嘗試使用“ distinct”時出現500錯誤。 沒有它,我不會出錯。 我不能在本地測試,因為SQLite不喜歡與眾不同。 我在用

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 docs( 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有什么問題嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM