簡體   English   中英

如何連接 Django 模型中的查詢集列表

[英]How to concatenate list of query sets in django models

我有查詢集列表,需要將它們連接成一個。

如何將查詢集列表連接成一個?

class TagListAPIView(generics.ListAPIView):


    serializer_class = serializers.TagSerializer

    def get_queryset(self):

        search_words = self.request.query_params['search_with'].split()

        querysets = []
        for word in search_words:
            queryset = Tag.objects.filter(
                Q(name__contains = word)
            )
            querysets.append(queryset)

        return querysets # ListAPIView does not accept this

我不認為我漂亮,但我以某種方式設法做到了。

class TagListAPIView(generics.ListAPIView):

    serializer_class = serializers.TagSerializer

    def get_queryset(self):

        search_words = self.request.query_params['search_with'].split()

        querysets = Tag.objects.none() # 1. Prepare empty queryset
        for word in search_words:
            queryset = Tag.objects.filter(
                Q(name__contains = word)
            )
            querysets = querysets.union(queryset) # 2. Use union

        return querysets

不要使用__contains過濾器,而是使用__in過濾器並傳入一個可迭代對象。 這相當於 SQL 的IN關鍵字。 有關 Django 中不同字段查找的更多信息,請訪問此處

class TagListAPIView(generics.ListAPIView):
    serializer_class = serializers.TagSerializer

    def get_queryset(self):
        search_words = self.request.query_params['search_with'].split()
        queryset = Tag.objects.filter(name__in=search_words)

        return queryset

值得記住的是,Django 中的查詢集的行為與 Python 中的標准列表完全不同。 有一個&| 用於組合查詢集的運算符,值得在這里閱讀。 也就是說,當您發現自己試圖發明一種笨拙的解決方法來操作查詢集時,通常是一個好兆頭,是時候深入研究文檔以獲得更好的解決方案了。 反正這是我的經歷。

暫無
暫無

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

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