返回顶部
首页 > 资讯 > 后端开发 > Python >Django ORM中,如何使用Coun
  • 465
分享到

Django ORM中,如何使用Coun

如何使用DjangoORM 2023-01-31 00:01:39 465人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

示例models 解决方法 有时候,我们想要获取一个对象关联关系的数量,但是我们不要所有的关联对象,我们只想要符合规则的那些关联对象的数量。 示例models # models.py from Django.db im

  • 示例models
  • 解决方法

有时候,我们想要获取一个对象关联关系的数量,但是我们不要所有的关联对象,我们只想要符合规则的那些关联对象的数量。

示例models

# models.py
from Django.db import models


class Person(models.Model):
    name = models.CharField('名称', max_length=32)
        
    def __str__(self):
        return self.name
        
        
class Task(models.Model):
    name = models.CharField('任务名称', max_length=64)
    is_done = models.BooleanField('是否完成', default=False)
    owner = models.ForeignKey(Person, verbose_name='任务执行人')
    
    def __str__(self):
        return "{}({})".fORMat(self.name, 'x' if self.is_done else 'o')

上面的代码中,我们使用了两个model,PersonTask。它们是一对多关系,一个用户可能有多个任务。

那么,我们怎么来获取一个用户已完成任务的数量呢?

解决方法

一般来说,都是使用下面这个办法:

>>> person = Person.objects.first()
>>> person.task_set.all().count()
15
>>> person.task_set.filter(is_done=True).count()
10

这个办法,确实可以解决问题。但是如果你有很多Person,都需要获取已完成任务的数量,使用这个方法会依次对每个person的tasks集合使用单独的sql,开销极大。

我们知道,DjanGo ORM有一个aggregate函数,叫做Count。一般情况下,可以用它来获取一个对象关联对象的数量,并生成一个额外的computed字段。而在Django2.0中1Count新加入了一个参数filter,使用它,可以在计算count数量之前先对集合进行过滤

>>> from django.db.models import Count, Q
>>> person = Person.objects.annotate(
...             Count('task_set', filter=Q(task_set__is_done=True))
...         ).first()
>>> person.task_set__count
10

而在Django2.0之前,我们应该怎么办呢?可以用SQL的Case/When来解决:

>>> from django.db.models import Count, When, Case
>>> person = Person.objects.annotate(Count(Case(When(task_set__is_done=True, then=0))).first()
>>> person.task_set__count
10

  1. Django api Reference: Count ↩

--结束END--

本文标题: Django ORM中,如何使用Coun

本文链接: https://lsjlt.com/news/181591.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Django ORM中,如何使用Coun
    示例models 解决方法 有时候,我们想要获取一个对象关联关系的数量,但是我们不要所有的关联对象,我们只想要符合规则的那些关联对象的数量。 示例models # models.py from django.db im...
    99+
    2023-01-31
    如何使用 Django ORM
  • 如何使用Oracle中的emp、dept来学习Django ORM
    这篇文章主要为大家展示了“如何使用Oracle中的emp、dept来学习Django ORM”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用Oracle中的emp、dept来学习Djang...
    99+
    2023-06-17
  • 如何使用ORM
    本篇内容介绍了“如何使用ORM”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ObjectvieSQL简介O...
    99+
    2024-04-02
  • 如何理解Django ORM操作
    这篇文章主要讲解了“如何理解Django ORM操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Django ORM操作”吧!查询聚合操作聚合操作...
    99+
    2024-04-02
  • 如何了解Django ORM操作
    本篇内容主要讲解“如何了解Django ORM操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何了解Django ORM操作”吧!查询操作对象.外键字段比如,我们拿到了一个书的信息,我们可以...
    99+
    2023-06-15
  • 如何在C#中使用Dapper ORM
    目录使用 Visual Studio 安装 Dapper ORM使用 Dapper ORM 进行增删查改在 Dapper ORM 中使用 存储过程对象关系映射(ORM)这个概念已经存...
    99+
    2024-04-02
  • peewee如何使用python orm
    这篇文章主要为大家展示了“peewee如何使用python orm ”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“peewee如何使用python orm ”这...
    99+
    2024-04-02
  • Django中Ajax如何使用
    这篇文章将为大家详细讲解有关Django中Ajax如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、ajax发送简单数据类型:html代码:在这里我...
    99+
    2024-04-02
  • Django中ORM基本应用与原理解析
    目录1.ORM构建数据表2.数据迁移3.Model相关的概念与使用方法Model的组成部分Meta元数据类属性说明Field的通用字段选项基础字段类型关系字段类型多对一一对一多对多关...
    99+
    2024-04-02
  • 如何在Django中使用Ajax
    这篇文章给大家介绍如何在Django中使用Ajax,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、ajax发送简单数据类型:html代码:在这里我们仅发送一个简单的字符串views.py #coding:u...
    99+
    2023-06-08
  • 如何在Django中使用ElasticSearch
    这篇文章主要介绍了如何在Django中使用ElasticSearch的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何在Django中使用ElasticSearch文章都会有所收获,下面我们一起来看看吧。什么是...
    99+
    2023-06-26
  • 如何在Django中使用API?
    好的,以下是文章内容: Django是一个流行的Python Web框架,它提供了许多内置的功能和库,使得开发Web应用变得更加容易。其中一个内置的功能是Django的REST框架,它让我们能够轻松地创建和使用API。 本文将会介绍如何在D...
    99+
    2023-06-29
    编程算法 django api
  • 如何使用C++的ORM框架QxORM
    这篇文章主要讲解了“如何使用C++的ORM框架QxORM”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用C++的ORM框架QxORM”吧!QxORM中,我们用的最多的无非是这两点官方表...
    99+
    2023-07-02
  • Django中如何使用Channels功能
    目录一、什么是WebSocket二、什么是Channels三、Django中使用Channel四、前端Websocket使用五、测试Channels功能      前言:最近后台写游...
    99+
    2024-04-02
  • Django中如何使用 Form组件
    Django中如何使用 Form组件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。为什么需要Form组件注:Form组件,只适用于,前后端...
    99+
    2024-04-02
  • python中如何使用Django框架
    这篇文章将为大家详细讲解有关python中如何使用Django框架,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。第一步:项目的创建与运行第一次使用 Django ,那么你必须要照顾一些初始设...
    99+
    2023-06-20
  • Bash中如何使用Django缓存?
    在Django应用程序中,缓存是一种非常重要的机制,它可以帮助我们减少数据库查询的次数,从而提高应用程序的性能。在这篇文章中,我们将探讨如何在Bash中使用Django缓存。 安装Django 在开始之前,我们需要先安装Django。...
    99+
    2023-10-26
    django bash 缓存
  • 如何使用 Golang 构建 RESTful API 并使用 ORM?
    使用 golang 构建 restful api 并使用 orm 涉及以下步骤:使用 gin 创建 api。安装并使用 gorm 作为 orm。定义数据模型并应用数据库迁移。创建增删改查...
    99+
    2024-05-15
    golang orm mysql git 前端应用
  • django+mysql如何使用
    这篇文章将为大家详细讲解有关django+mysql如何使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Django中每一个模型model都对应于数据库中的一张表,每个...
    99+
    2024-04-02
  • Django中如何使用django-celery完成异步任务
    这期内容当中小编将会给大家带来有关Django中如何使用django-celery完成异步任务 ,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Django中如何使用django-celery完成异步任务&...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作