[英]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.