前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django小技巧05: 合并QuerySets

Django小技巧05: 合并QuerySets

作者头像
用户1416054
发布2018-12-04 09:45:49
2K0
发布2018-12-04 09:45:49
举报
文章被收录于专栏:JackeyGao的博客JackeyGao的博客

翻译整理自: simpleisbetterthancomplex.com

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

查看以下模型:

Python

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
stories = django_stories | vitor_stories  # merge querysets

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

Python

代码语言:javascript
复制
recent_stories = stories.distinct().order_by('-date')[:10]

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档