Django小技巧05: 合并QuerySets

翻译整理自: simpleisbetterthancomplex.com

当你想要让两个或者多个 queryset 合并为一个 queryset 的时候, 并且希望使用 list, 而且想要保留对象的filter, count, distinct等 queryset 方法。

查看以下模型:

Python

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)

假设你想显示特定的 Medium 中发布的故事以及属于特定作者的所有故事。那么一般情况下, 你用以下方法获取了两个 queryset。

Python

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')

此时我们有两个查询集(QuerySets) ,我们可以通过| 运算符来合并这两个查询集。

Python

stories = django_stories | vitor_stories  # merge querysets

此时你依然可以使用 queryset 的一些操作方法.

Python

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

注意: 合并运算符仅适用于同一类型的 queryset, 并且数据为切片前数据集.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习原理

深度学习(1)——tensorflow简介什么是TensorFlow?什么是数据流图?安装基本概念示例变量的更新操作

3803
来自专栏翻译

路径查找器AI

问题源于我想建立一个游戏AI,它要能够定义一条从起点到终点的路径,同时避开路上的墙壁障碍物。为此,我写了一个C#库(path.dll),它允许定义一个二维空间(...

2317
来自专栏专知

【干货】TensorFlow中那些鲜为人知却又极其实用的知识

TensorFlow的生态圈极其强大,覆盖了科研、工程中的各种流程,其中一些特别好用的模块和技巧可以使你的工作效率大幅度提升,也可以让你的产品变得非常稳定。本文...

1541
来自专栏恰童鞋骚年

设计模式的征途—8.桥接(Bridge)模式

在现实生活中,我们常常会用到两种或多种类型的笔,比如毛笔和蜡笔。假设我们需要大、中、小三种类型的画笔来绘制12中不同的颜色,如果我们使用蜡笔,需要准备3*12=...

1353
来自专栏机器学习原理

深度学习(2)——tensorflow可视化TensorFlow变量作用域TensorFlow可视化示例

1625
来自专栏简书专栏

基于tensorflow、CNN、清华数据集THUCNews的新浪新闻文本分类

tensorflow是谷歌google的深度学习框架,tensor中文叫做张量,flow叫做流。 CNN是convolutional neural netwo...

1.6K1
来自专栏听雨堂

Pandas对行情数据的预处理

库里是过去抓取的行情数据,间隔6秒,每分钟8-10个数据不等,还有开盘前后的一些数据,用Pandas可以更加优雅地进行处理。 ? 需要把当前时间设置为index...

22110
来自专栏专知

【干货】使用TensorFlow官方Java API调用TensorFlow模型(附代码)

1.6K4
来自专栏章鱼的慢慢技术路

层层递进——宽度优先搜索(BFS)

2414
来自专栏码匠的流水账

HashedWheelTimer算法详解

George Varghese 和 Tony Lauck 1996 年的论文:Hashed and Hierarchical Timing Wheels: da...

1531

扫码关注云+社区

领取腾讯云代金券