·

Django combine multiple QuerySets

Published at 2024-05-03 00:33:49Viewed 248 times
Professional article
Please reprint with source link

Suppose that we have two different models.

class Author(models.Model):
    name = models.CharField(max_length=50)

class Article(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author)

In certain circumstances, you might want to merge two querysets into one queryset. For example, you may want to combine Author.objects.all() and Article.objects.all(). You could accomplish this by pure python method itertools.chain, or using Django's inbuilt queryset method union . However, these are no more intuitive than combining two querysets directly.

We recommend to use the package django-querysetsequence. To combine Author.objects.all() and Article.objects.all(), you just need to call QuerySetSequence directly :

from queryset_sequence import QuerySetSequence

authors = Author.objects.all()
articles = Article.objects.all()
authors_articles = QuerySetSequence(authors, articles)

If you have multiple models A, B, C, D, E, F , and have an array data containing their querysets, e.g. A.objects.all(), B.objects.all() , etc. To combine querysets in an array, you could make use of python's inbuilt method reduce :

from functools import reduce
from queryset_sequence import QuerySetSequence

q = reduce(QuerySetSequence, data)


Comments

There is no comment, let's add the first one.

弦圈热门内容

Get connected with us on social networks! Twitter

©2024 Guangzhou Sinephony Technology Co., Ltd All Rights Reserved