【Django 03】QuerySet 和 Instance应用

1. DRF QuerySet 和 Instance功能概述

1.1 QuerySet

从数据库中查询结果存放的集合称为 QuerySet。 Django ORM用到三个类:Manager、QuerySet、Model。每个Model都有一个默认的
manager实例,名为objects。Django的ORM通过Mode的objects属性提供各种数据操的接口(API),并通过 Model.objects 方法返回QuerySet,生产符合查询条件的列表,列表中包含多个 Instance。
在Django中,QuerySet是一个与数据库交互的高级抽象层,它用于执行数据库查询操作和操作数据库表中的数据。QuerySet是Django的ORM(Object-Relational Mapping)系统的一部分,它允许你通过Python代码而不是SQL语句来查询和操作数据库。

class QuerySet(model=None, query=None, using=None)[source]

其具有两大特色(1) 惰性:若这个对象中包含了需要的数据且需要使用时,它会去DB中获取数据,否则不会获取。 比如说在内部,创建、过滤、切片和传递一个QuerySet,而没有进行真正的数据执行,不会真实操作数据库,被称为惰性。(2)缓存使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。

1.2 操作说明

设定:已存在数据表定义如下:

class Goods(DjangoPeople):
{
number = CharField(max_length=32, verbose_name=‘编号’)
name = CharField(max_length=64, verbose_name=‘名称’)
unit = CharField(max_length=64, verbose_name=‘单位’)
remark = CharField(max_length=256, verbose_name=‘备注’)
} 
* `all()` :返回模型的所有对象,它的效果等价于不带任何条件的 `filter()` 方法。如:  DjangoPeople.objects.all() # 查询所有 语句。*  filter()(**kwargs) 用于返回符合条件的所有数据。如:DjangoPeople.objects.filter(name=“abc”) #取出name="x"的DjangoPeople成员:又如:DjangoPeople.objects.filter(name=“x”) .filter(unit=“y”) #取出name="x"且unit="y"的DjangoPeople成员:

get() 方法与 filter() 的作用类似,用于返回符合条件的单个对象但是可能会返回多个值

delete() :可以删除符合条件的所有对象

如:catagories_to_delete=DjangoPeople.objects.filter(name=“abc”)
deleted_count= categories_to_delete.delete()

update() :将符合条件的所有对象的某个字段值进行更新

create()save() 方法的快捷方式,用于创建并保存一个新的对象。

如:created_category = DjangoPeople.objects.create(name=“abc”)

count() :返回符合条件的对象数量

order_by() :对返回的对象进行排序,默认为升序。降序则在字段名前面加负号。

查询数据:你可以使用QuerySet来查询数据库中的数据。例如,你可以执行filter()、get()、exclude()等方法,以获取匹配特定条件的数据库记录。

链式查询:QuerySet支持链式查询,这意味着你可以在查询中多次使用不同的方法,以便筛选和排序数据。这使得构建复杂的查询非常容易。

延迟执行:QuerySet使用延迟执行的机制,它并不立即执行数据库查询,而是在需要数据时才执行。这有助于优化查询,减少不必要的数据库访问。

更新和删除数据:你可以使用update()方法来更新QuerySet中的数据,或者使用delete()方法删除匹配条件的数据。

聚合和统计:QuerySet支持对查询结果进行聚合和统计操作,如计数、求和、平均值等。

序列化数据:你可以将QuerySet中的数据序列化为JSON或其他格式,以便在API或前端应用程序中使用。

使用模型类:QuerySet是与Django模型类相关联的,它与模型类一起工作,允许你以面向对象的方式处理数据库数据。

QuerySet其他的其接口定义,用法类似,这里不再一一赘述,需要运用,可查阅Django官网。

在这里插入图片描述

1.3 Instance功能

Instance指的是一个 Django 模型的单个实例,也就是数据库中的一行数据。相比于 QuerySet(查询集合),它是针对单个对象的操作,用于创建、更新或者删除单个模型实例。
创建一个对象:Obj = Model(attr1=val1, attr2=val2),Obj.save()
更新一个对象:Obj = Model.objects.get(id=xxx),Obj.attr1 = val1,Obj.save()
删除一个对象:Obj = Model.objects.get(id=xxx),Obj.delete()

QuerySet 适用于需要查找多个对象或进行聚合操作的场景,而 Instance 适用于单独对象的创建、修改和删除操作。

在这里插入图片描述

2. Django APIView

2.1 Teaching Order

APIView 的概念

APIview 是 Django REST Framework 提供的一个视图类。它和 Django 中的 view 类有些相似,但是又有一些不同之处。APIview 可以处理基于 HTTP 协议的请求,并返回基于内容协商的响应,它旨在提供一个易于使用且灵活的方式来构建 API 视图。

view.py

# 面向对象编程
from django.shortcuts import render
from rest_framework.decorators import api_view
from .models import *
from rest_framework.response import Response
from rest_framework.views import APIView
#### APIViewclass GetGoods(APIView):def get(self, request):data = Goods.objects.all()serializer = GoodsSerializer(instance=data, many=True)print(serializer.data)return Response(serializer.data)def post(self, request):# 从请求数据中提取字段request_data = {"category": request.data.get("Goodscategory"),"number": request.data.get("number"),"name": request.data.get("name"),"barcode": request.data.get("barcode"),"spec": request.data.get("spec"),"shelf_life_days": request.data.get("shelf_life_days"),"purchase_price": request.data.get("purchase_price"),"retail_price": request.data.get("retail_price"),"remark": request.data.get("remark"),}# 使用 create() 方法创建新的商品对象new_goods = Goods.objects.create(**request_data)# 对创建的对象进行序列化,并作为响应返回serializer = GoodsSerializer(instance=new_goods)return Response(serializer.data)# 面向对象编程class FilterGoodsCategoryAPI(APIView):# request 表示当前的请求对象# self 表示当前实例对象def get(self, request, format=None):print(request.method)return Response('ok')def post(self, request, format=None):print(request.method)return Response('ok')def put(self, request, format=None):print(request.method)return Response('ok')

url.py

from apps.erp_test.views import *urlpatterns = [path('admin/', admin.site.urls),path('filtergoodscategoryapi/', FilterGoodsCategoryAPI.as_view()),path('getgoods/', GetGoods.as_view()),
]

首先,self 表示当前实例对象,这里指的是视图类的实例对象。

request 表示当前的请求对象,包含了客户端发送的信息,例如请求头、请求体等。

pk 是 path 参数 int:pk,用于获取请求中的产品 ID。

format 表示客户端请求的响应格式,例如 JSON、XML 等。这个参数通常不需要指定,会根据客户端发送的 Accept 请求头来自动选择响应格式。如果客户端指定了响应格式,那么我们可以从请求中获取到这个参数并且做出相应的处理。

在这个方法中,我们需要通过 pk 参数获取到对应的产品数据,并将其序列化成 JSON 格式并返回给客户端。具体的实现方式可以参考序列化器文档和 Django ORM 文档。

在这里插入图片描述
  ‍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/110847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 常用类(包装类)

目录 八大Wrapper类包装类的分类 装箱和拆箱包装类和基本数据类型之间的转换常见面试题 包装类方法包装类型和String类型的相互转换包装类常用方法(以Integer类和Character类为例)Integer类和Character类的常用方法 Integer创建机制(面试题&a…

划词搜索IP插件

插件背景 浏览器插件可以让用户根据个人工作及日常需求来定制浏览器的功能和界面。当用户在网页上看到一些IP地址时,或许会好奇它们的来源和归属。传统的做法是,用户需要复制这个IP地址,然后跳转到埃文科技旗下的http://IPUU.net网站进行查询…

基于Java的考研信息查询系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

速卖通测评补单的条件和步骤

速卖通测评补单对于卖家来说是一种低成本、高回报的推广营销方式,可以提高商品的流量、转化率、关键词质量分和链接权重。但是如果处理不当,可能会对店铺产生负面影响。下面是实现自养号给自己店铺测评的条件和步骤: 1. 稳定的测评环境系统 …

Docker是一个流行的容器化平台,用于构建、部署和运行应用程序。

文章目录 Web应用程序数据库服务器微服务应用开发环境持续集成和持续部署 (CI/CD)应用程序依赖项云原生应用程序研究和教育 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:…

react配置 axios

配置步骤(基本配置): 1.安装 axios cnpm install axios --save2.src/utils 新建一个 request.js文件(没有utils就新建一个目录然后再建一个request.js) 3.request代码如下: 这个是最简单的配置了,你可以根据自己的需…

链表的概念+MySingleList的实现

文章目录 链表一、 链表的概念1.概念2. 结构 二、MySingleList的实现1 .定义内部类2 .创建链表3. 遍历链表并打印4.查找单链表中是否包含关键字key5.得到链表的长度6.头插法7. 尾插法8.任意位置插入8.删除结点清空 链表 顺序存储:顺序表/ArrayList 优点&#xff1…

【数据库范式】实际案例分析

前言 在日常业务研发过程中,我们常常需要与数据库表打交道。设计范式是数据表设计的基本原则,对于数据表的设计范式,我们特别容易忽略它的存在。很多时候,当数据库运行了一段时间之后,我们才发现数据表设计上有问题。然…

linux常见命令-文件目录类

9.4 文件目录类 (1)pwd 指令:显示当前工作目录的绝对路径 (2)Is指令:查看当前目录的所有内容信息 基本语法: ls [选项,可选多个] [目录或是文件] 常用选项:-a:显示当前目录所有的文件和目录,包括隐藏的…

钢铁异常分类 few-shot 问题 小陈读paper 钢铁2

很清爽的 abstract 给出链接 前面的背景意义 其实 是通用的 这里替大家 整理一吓吓 1 缺陷分类在钢铁表面缺陷检测中 有 意义。 2 大多数缺陷分类模型都是基于完全监督的学习, 这需要大量带有图像标签的训练数据。 在工业场景中收集有缺陷的图像是非常困难…

C++入门(c++历史篇)

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 重点 1. 什么是C2. C的发展…

RTOS(6)任务管理

任务状态理论 我们是怎么实现,两个同优先级的任务之间交替执行的呢? 任务切换的基础:tick中断! tick为1ms一个周期,可以通过修改时钟配置修改; running:正在进行的任务3为running&#xff…

`SQL`编写判断是否为工作日函数编写

SQL编写判断是否为工作日函数编写 最近的自己在写一些功能,遇到了对于工作日的判断,我就看了看sql,来吧!~(最近就是好疲惫) 我们一起看看(针对ORACLE) 1.声明: CREATE OR REPLACE PACKAGE GZYW_2109_1214.PKG_FUN_GETDAY_HDAY AS /** * 通过节假日代码获取指定的日期[查找基…

drawio简介以及下载安装

drawio简介以及下载安装 drawio是一款非常强大的开源在线的流程图编辑器,支持绘制各种形式的图表,提供了 Web端与客户端支持,同时也支持多种资源类型的导出。 访问网址:draw.io或者直接使用app.diagrams.net直接打开可以使用在线版…

STM32 裸机编程 03

MCU 启动和向量表 当 STM32F429 MCU 启动时,它会从 flash 存储区最前面的位置读取一个叫作“向量表”的东西。“向量表”的概念所有 ARM MCU 都通用,它是一个包含 32 位中断处理程序地址的数组。对于所有 ARM MCU,向量表前 16 个地址由 ARM …

VSCode搭建ESP32 ESP-IDF开发环境-Windows

陈拓 2023/10/09-2023/10/14 1. 安装Windows系统下的ESP32 ESP-IDF开发环境 见《Windows系统安装ESP32 ESP-IDF开发环境》 Windows系统安装ESP32 ESP-IDF开发环境-CSDN博客Windows系统安装ESP32 ESP-IDF开发环境。https://blog.csdn.net/chentuo2000/article/details/1339225…

迅为RK3588开发板使用RKNN-Toolkit-lite2运行测试程序

1 首先也需要部署运行环境,将库文件放入 RK3588 开发板上,我们将网盘资料“iTOP-3588 开发 板 \02_ 【 iTOP-RK3588 开 发 板 】 开 发 资 料 \12_NPU 使 用 配 套 资 料 \05_Linux_librknn_api\librknn_api\aarch64”路径下的文件通过U盘拷贝到开发板的…

AI AIgents时代-(五.)Autogen

由微软开发的 Autogen 是一个新的 Agents 项目,刚一上线就登上GitHub热榜,狂揽11k星✨✨✨ 项目地址:https://github.com/microsoft/autogen Autogen 允许你根据需要创建任意数量的Agents,并让它们协同工作以执行任务。它的独特之…

stable-diffusion-webui sdxl模型代码分析

采样器这块基本都是用的k-diffusion,模型用的是stability的原生项目generative-models中的sgm,这点和fooocus不同,fooocus底层依赖comfyui中的models,comfy是用load_state_dict的方式解析的,用的load_checkpoint_guess…

实时精准 自我防护 | 开源网安RASP平台能力获客户认可!

近日,开源网安收到了一封来自华润数科的感谢信,表达了对开源网安团队在网络安全工作中给予大力支持的衷心感谢。开源网安十分注重客户的需求和信任,客户的满意和认可是开源网安最大的追求。 在助力华润数科网络安全工作开展过程中&#xff0c…