Django結合Manager重寫create、update、delete方法

想要重寫create、update、delete方法我們先要了解一下其他的知識點

Manager

在Django中,Manager是一個非常核心的概念,它負責與數據庫交互,提供了訪問和管理模型實例(即數據庫中的記錄)的方式。每個Django模型類默認都會有一個名為objects的Manager實例,它是django.db.models.Manager類的一個實例。Manager允許你執行查詢操作,如獲取、過濾、創建、更新或刪除數據庫中的記錄。

例如:當你執行?Article.objects.all()?的時候,這里的objects實際上就是一個manager。

添加額外的Manager

除了默認的objectsManager,你還可以定義自定義的Manager來滿足特定的查詢需求。

class PublishedManager(models.Manager):def get_queryset(self):return super().get_queryset().filter(status='published')class Article(models.Model):objects = models.Manager()  # 默認Managerpublished = PublishedManager()  # 自定義Manager# 使用自定義Manager
articles = Article.published.all()

自定義Manager方法

你還可以在Manager中定義自定義方法,以便封裝復雜的查詢邏輯。

# 自定義模型管理器類
class BookManager(models.Manager):#自定義模型管理器中的方法def title_count(self, keyword):return self.filter(title_icountains=keyword).count()class Book(models.Model):title = models.CharField(max_length=100)authors = models.ManyToManyField(Author)...objects = BookManager()def __str__(self):return self.title>>> Books.objects.title_count('django')    #這是我們自定義的manager中的查詢方法>>> Books.objects.filter(title__icontains='django').count()    # 默認的查詢方法依然可用(相當于上面的title_count)

重寫create、update、delete方法

在Django中,結合模型管理器(Manager)來重寫createupdate(實際上是通過覆蓋save方法間接實現)和delete方法,可以讓你在執行這些基本的數據庫操作時插入自定義的邏輯。下面是如何結合Manager來實現這些定制操作的例子:

from django.db import modelsfrom datetime import datetime
from django.db import models
# from DjangoUeditor.models import UEditorField# Create your models here.# 重寫QuerySet
class CustomQuerySet(models.Manager):def update(self, **kwargs):print('=====================', kwargs)return super().update(**kwargs)def create(self, *args, **kwargs):print('==========create')return super().create(*args, **kwargs)def delete(self):print('==========delete')return super().delete()class GoodsCategory(models.Model):"""商品分類"""CATEGORY_TYPE = ((1, "一級類目"),(2, "二級類目"),(3, "三級類目"),)name = models.CharField('類別名', default="", max_length=30, help_text="類別名")code = models.CharField("類別code", default="", max_length=30, help_text="類別code")desc = models.TextField("類別描述", default="", help_text="類別描述")# 目錄樹級別category_type = models.IntegerField("類目級別", choices=CATEGORY_TYPE, help_text="類目級別")# 設置models有一個指向自己的外鍵parent_category = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True, verbose_name="父類目級別",help_text="父目錄",related_name="sub_cat")is_tab = models.BooleanField("是否導航", default=False, help_text="是否導航")add_time = models.DateTimeField("添加時間", default=datetime.now)# 設置對象管理類objects = CustomQuerySet()class Meta:verbose_name = "商品類別"verbose_name_plural = verbose_namedef __str__(self):return self.name

測試結果

 GoodsCategory.objects.all()
<CustomQuerySet [<GoodsCategory: luojun>]>GoodsCategory.objects.all().create(name='123')
==========createGoodsCategory.objects.all().delete()
==========deleteGoodsCategory.objects.create(name='123')
==========create
GoodsCategory.objects.all().update(name='123')
===================== {'name': '123'}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16793.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16793.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16793.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jupyter lab怎么使用cmd打開

我一般都是用vscode&#xff0c;或者pycharm的終端打開 但是我為了秉承程序員的素養&#xff08;就是覺得命令行打開很帥&#xff09; 我試著去直接用一樣的命令&#xff0c;但是不行&#xff0c;顯示不是內部命令之類的。 是因為沒有配置環境變量。 但是我突然發現&#x…

【計算機畢業設計】基于SSM++jsp的汽車客運站管理系統【源碼+lw+部署文檔】

目錄 第1章 緒論 1.1 課題背景 1.2 課題意義 1.3 研究內容 第2章 開發環境與技術 2.1 MYSQL數據庫 2.2 JSP技術 2.3 SSM框架 第3章 系統分析 3.1 可行性分析 3.1.1 技術可行性 3.1.2 經濟可行性 3.1.3 操作可行性 3.2 系統流程 3.2.1 操作流程 3.2.2 登錄流程 3.2.3 刪除信息流…

rpm與yum擴展、命令

目錄 系統安裝軟件方式 1、rpm方式 命令 yum方式 安裝 更新和升級 查找與顯示 刪除程序 清除緩存 僅下載 系統安裝軟件方式 1、rpm方式 優點&#xff1a;無需網絡安裝軟件 缺點&#xff1a;無法解決軟件依賴 命令 rpm -ivh 安裝 --nodeps忽略依賴關系 --force強…

希爾伯特 包絡證明 未出現模態混合現象 是啥?

希爾伯特變換在信號處理中常用于求信號的包絡&#xff0c;它是一種線性運算&#xff0c;能夠將實數信號轉換為其解析信號&#xff0c;即包含原信號及其希爾伯特變換的復數信號。解析信號的實部是原信號&#xff0c;虛部是原信號的希爾伯特變換。 包絡證明 在信號處理中&#…

TypeScript 學習筆記(五):異步編程與錯誤處理

1. 引言 在前幾篇學習筆記中,我們介紹了 TypeScript 的基礎知識、高級類型系統、模塊與命名空間以及裝飾器和高級編程技巧。本篇將重點探討 TypeScript 中的異步編程與錯誤處理,幫助你在實際項目中更好地處理異步操作和錯誤。 2. 異步編程 異步編程是現代 JavaScript 應用…

C語言預處理中#和##運算符是什么意思?

一、問題 有?認為&#xff0c;在C 語?中使?“#”運算符的就是預處理&#xff0c;是不是呢&#xff1f;“##”?是什么呢&#xff1f; 二、解答 在程序中&#xff0c;最為常?的是#define 宏定義指令&#xff0c;下?通過這個指令理解?下“#”的作?。編寫?個預處理指令&a…

人大金倉 KingBase查詢死鎖,釋放死鎖

人大金倉(kingbase)查詢數據庫死鎖及釋放 kingbase鎖表排查以及釋放鎖 總結下 -- 查詢&#xff0c;可自己添加where條件 SELECT * FROM sys_stat_activity WHERE state ! idle AND wait_event_typeLock-- 結束進程 SELECT sys_terminate_backend(pid);

PLC集成BL121PO網關優化智能電網的遠程管理PLC轉OPC UA協議

隨著工業自動化技術的不斷發展&#xff0c;智能電網等復雜系統對于設備之間高效通信的需求日益增加。PLC轉OPC UA協議轉換網關BL121PO作為一款領先的協議轉換設備&#xff0c;通過其獨特的設計和功能&#xff0c;為用戶提供了高效、安全的PLC接入OPC UA的解決方案。 設備概述 …

了解Hive 工作原理:Hive 是如何工作的?

一、概念 1、Hive Apache Hive 是一個分布式的容錯數據倉庫系統&#xff0c;可實現大規模分析和便于使用 SQL 讀取、寫入和管理駐留在分布式存儲中的PB級數據。 Hive是建立在Hadoop之上的數據倉庫框架&#xff0c;它提供了一種類SQL的查詢語言—HiveQL&#xff0c;使得熟悉S…

【深度學習實戰—8】:基于MediaPipe的人臉檢測

?博客主頁&#xff1a;王樂予&#x1f388; ?年輕人要&#xff1a;Living for the moment&#xff08;活在當下&#xff09;&#xff01;&#x1f4aa; &#x1f3c6;推薦專欄&#xff1a;【圖像處理】【千錘百煉Python】【深度學習】【排序算法】 目錄 &#x1f63a;一、Med…

軟件3班20240527

JDK 版本與 Tomcat 的 兼容性

rk3568_spinlock

文章目錄 前言1、spinlock是什么?2、自旋鎖實驗2.1源碼2.2 結果圖總結前言 本文記錄在rk3568開發板做的自旋鎖實驗。通過自旋鎖控制state變量來限制只有一個應用程序來打開驅動設備。 1、spinlock是什么? spinlock稱為自旋鎖,如果獲取不到資源,就只能一直傻傻地等待資源被…

實現銷售與客流雙增長!看看社區零售“排隊王”如何成為頂流?

5月18日至5月26日&#xff0c;北京華聯BHGMall燃情推出了一年一度的2024 Need&#xff08;你的&#xff09;BHGDay&#xff0c;接棒“五一”熱潮&#xff0c;獻禮“520”&#xff0c;通過韓式俯拍機、人生四宮格拍攝大賽、真合拍星派對、超級品牌日等豐富多彩的線上線下活動&am…

Python心得(待補充)

Python編程習慣 打開jupyter notebook&#xff0c;用于測試一些小的代碼塊或者函數 Python學習的一些好網站 對于內容少的可以看一遍 對于內容多的&#xff0c;可以當工具書檢索使用 下列網站的知識涵蓋度由淺到深&#xff0c;可以按照(暫定)順序逐個進行檢索&#xff0c;即先…

dynamic與指針

C類型父類與子類的轉換--dynamic_cast - ren_zhg1992 - 博客園 (cnblogs.com) #include <iostream> using namespace std;class Base { public:Base() {};virtual void Show() { cout << "This is Base calss"; } }; class Derived :public Base { publ…

迷你手持小風扇哪個牌子質量好又實惠?這五款不踩雷推薦!

每年夏天&#xff0c;迷你手持小風扇作為消暑神器都會成為市場上的熱銷產品。然而&#xff0c;由于選購經驗有限&#xff0c;許多消費者在面對眾多品牌和型號時&#xff0c;往往難以判斷哪個牌子的迷你小風扇既質量好又價格實惠。在追求性價比的同時&#xff0c;我們也不應忽視…

【設計模式】JAVA Design Patterns——Data Access Object(數據訪問對象模式)

&#x1f50d;目的 對象為某種類型的數據庫或其他持久性機制提供了抽象接口。 &#x1f50d;解釋 真實世界例子 有一組客戶數據需要持久化到數據庫中。 我們需要整個額外的增刪改查操作以便操作客戶數據。 通俗描述 DAO是我們通過基本持久性機制提供的接口。 維基百科 在計算機…

【云原生】kubernetes中的認證、權限設置---RBAC授權原理分析與應用實戰

?? 歡迎大家來到景天科技苑?? &#x1f388;&#x1f388; 養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者簡介&#xff1a;景天科技苑 &#x1f3c6;《頭銜》&#xff1a;大廠架構師&#xff0c;華為云開發者社區專家博主&#xff0c;…

基于UDP的TFTP文件傳輸-實現網盤上傳下載功能

數據傳輸模式&#xff1a;octet(二進制模式) #include<head.h> char* down_up_request(char* buf,char* filename,int rw,int sockfd,struct sockaddr_in in); int download(struct sockaddr_in in,char* filename,char* buf,int sockfd); int upload(struct sockaddr_in…

Flask教程4:Flask數據交互

文章目錄 使用flask處理表單flash閃現的使用Flask實現文件上傳Session的使用為什么session比cookie安全?設置session獲取session的值刪除session的值或清空session所有內容 使用flask處理表單 傳統的前端通用表單&#xff0c;需要前后端共同完成操作&#xff0c;前端需要使用…