如何在 Django 中合并查询集?

我将向您解释如何在 Django 中合并查询集的示例。
让我们讨论一下 Django 合并查询集示例。
我简单地一步一步解释了 django 结合来自不同模型的两个查询集。
您将学习如何在 Django 中合并两个查询集。

当您想将两个或多个查询集组合成一个查询集而不牺牲执行filtercountdistinct等操作的能力时,这个技巧特别有用。

在这里,我简单地逐步解释了如何在 Django 中合并查询集的示例。

第 1 步:创建项目

在这一步中,我们将使用 django-admin 创建一个新的 django 项目。返回命令行界面并运行以下命令:

 django-admin startproject example 

第 2 步:创建应用

现在我们将创建一个名为core的应用程序来存储帖子名称列表。我们故意保持基本的东西。使用Control+c停止本地服务器并使用startapp命令创建这个新应用程序。

 python manage.py startapp core 

第 3 步:创建模型

在这一步中,我们将需要用于存储联系人的数据库模型。打开 todo/models.py 文件并添加以下代码:
todo/models.py

from django.db import models

class Story(models.Model):
    title = models.CharField(max_length=255)
    content = models.TextField(blank=True)
    category = models.ForeignKey(Category, related_name='stories')
    author = models.ForeignKey(User, related_name='stories')

class Medium(models.Model):
    name = models.CharField(max_length=30, unique=True)
    stories = models.ManyToManyField(Story)

好的,一切就绪。我们可以为此更改生成一个迁移文件,然后通过迁移将其集成到我们的数据库中。

python manage.py makemigrations python manage.py migrate 

考虑这样一种情况,您想要显示在特定媒体中发布的所有文章以及用户使用类别 django 撰写的文章。请注意,该用户可能为其他媒体撰写过故事:

medium = Medium.objects.get(name='Django Blog')
user = User.objects.get(username='vitor')

django_stories = medium.stories.all()
vitor_stories = user.stories.filter(category__name='django')

目前,我们有两个不同的查询集:一个包含来自特定媒体的所有故事,另一个包含来自使用 Django 类别的特定用户的所有故事。

使用 | 运算符,查询集可以组合如下例所示:

stories = django_stories | vitor_stories  # merge querysets

您仍然可以执行查询集操作:

recent_stories = stories.distinct().order_by('-date')[:10]

重要的是要记住合并/组合运算符 | 仅对来自同一模型且在拆分之前运行的查询集起作用。

我希望它能帮助你……

发表评论

邮箱地址不会被公开。 必填项已用*标注