Django模型的属性与方法

本节介绍Django模型的属性和方法,以及如何重写之前定义的模型方法等内容。

3.5.1  模型属性

Django模型中最重要的属性就是Manager,它是Django模型和数据库查询操作之间的接口,并且被用作从数据库当中获取实例的途径。如果Django模型中没有指定自定义的Manager,则默认名称就是“objects”。

另外,Manager只能通过模型类来访问,不能通过模型实例来访问。

3.5.2  模型方法

在Django模型中添加自定义方法,会给对象提供自定义的“行级”操作能力;与之对应的是Manager的方法,其目的在于提供“表级”的操作。模型方法应该在某个对象实例上生效,这是一个将相关逻辑代码放在模型上的技巧。

关于模型方法的使用,示例代码如下:

【代码3-12】

01  from django.db import models
02  
03  class PersonAge(models.Model):
04      name = models.CharField(max_length=32)
05      age = models.CharField(max_length=8)
06  
07      def person_age_status(self):
08          "Returns the person's age status."
09          if self.age < 1:
10              return "Baby"
11          elif self.age < 3:
12              return "Toddler"
13          elif self.age < 6:
14              return "Preschooler"
15          elif self.age < 12:
16              return "School-Children"
17          elif self.age < 18:
18              return "Teenager"
19          elif self.age < 40:
20              return "Youth"
21          elif self.age < 60:
22              return "Middle-Age"
23          else:
24              return "Old-Age"
25  
26      @property
27      def person_info(self):
28          "Returns the person's info."
29          return '%s %s' % (self.name, self.age)
30      #...
31      pass

【代码分析】

在第03行代码中,定义了一个描述人的年龄段的类PersonAge。

在第07~24行代码中,定义了PersonAge类的模型方法person_age_status(),返回具体年龄段的信息。

在第26~29行代码中,定义了PersonAge类的属性方法person_info(),返回个人信息。

3.5.3  重写之前定义的模型方法

Django模型中还有一个关于模型方法的集合,其中包含了一些可能是自定义的数据库行为,比如save()方法和delete()方法就是两个最有可能定制的方法。同时,设计人员可以重写这些方法(或其他模型方法)以更改方法的行为。

有一个非常典型的重写内置方法的场景,就是打算在保存对象时额外做一些事。关于重写save()方法的示例代码如下:

【代码3-13】

01  from django.db import models
02  
03  class Blog(models.Model):
04      name = models.CharField(max_length=100)
05      tagline = models.TextField()
06  
07      def save(self, *args, **kwargs):
08          do_something()
09          super().save(*args, **kwargs)  # Call the "real" save() method.
10          do_something_else()
11      #...
12      pass

【代码分析】

在第03行代码中,定义了一个描述博客的类Blog。

在第07~10行代码中,重写了save()方法,具体说明如下:

  • 第09行代码中,通过super()方法调用了父类中原生的save()方法。
  • 在第08行和第10行代码中,设计人员可以通过编写自己的代码来实现重写save()方法。

另外,还可以重写 save()方法来阻止该方法的执行,示例代码如下:

【代码3-14】

01  from django.db import models
02  
03  class Blog(models.Model):
04      name = models.CharField(max_length=100)
05      tagline = models.TextField()
06      
07      def save(self, *args, **kwargs):
08          if self.name == "King's blog":
09              return # King永远不应该有自己的博客
10          else:
11              super().save(*args, **kwargs)  # 调用原生的save()方法
12      #...
13      pass

【代码分析】

在第03行代码中,定义了一个描述博客的类Blog。

在第07~11行代码中,重写了save()方法,具体说明如下:

  • 在第08~11行代码中,通过“if…else…”条件语句判断name属性值,然后根据判断条件来选择是否通过super()方法来调用父类中原生的save()方法。

Django模型会不时地扩展模型内置方法的功能,也会添加新参数。假如设计人员在重写的方法中使用了*args和**kwargs参数,则必须确保重写方法能够接收这些新添加的参数。

本文节选自《Django 5企业级Web应用开发实战(视频教学版)》,获出版社和作者授权发布。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索大型语言模型(LLM)在人类性格个性评估(MBTI)中的前景与应用

1.概述 大型语言模型&#xff08;LLM&#xff09;如ChatGPT在各个领域的应用确实越来越广泛&#xff0c;它们利用庞大的数据集进行训练&#xff0c;以模拟人类的语言理解和生成能力。这些模型在提供信息、解答问题、辅助决策等方面表现出了强大的能力&#xff0c;但它们并不具…

微电子领域常见概念(六)化学键合

微电子领域常见概念&#xff08;六&#xff09;化学键合 化学键合是化学中一个非常基础且重要的概念&#xff0c;它描述了原子之间通过电子的相互作用形成的连接。可以进行以下分类&#xff1a; 1. 离子键合&#xff08;Ionic Bonding&#xff09; • 定义&#xff1a;离子键合…

如何查看自己的公网IP?

我们在网络中&#xff0c;每一个设备都被分配了一个唯一的IP地址&#xff0c;用以区分和识别其他设备。公网IP地址是指可被公众访问的IP&#xff0c;是因特网上的全球唯一标识。当我们需要查看自己的公网IP时&#xff0c;可以采取以下几种方式。 使用命令行查看公网IP 在Windo…

书生·浦语大模型实战训练营--第二期第七节--OpenCompass大模型评测实战--homework

一、配置环境 安装下面的顺序以及自己的文件路径配置环境 conda create -n opencompass python3.10 -y 安装下面的包 absl-py accelerate>0.19.0 boto3 cn2an cpm_kernels datasets>2.12.0 einops0.5.0 evaluate>0.3.0 fairscale func_timeout fuzzywuzzy immutab…

Linux 系统IO函数之stat、lstat函数

1、stat函数 要点&#xff1a; int stat(const char *pathname, struct stat *statbuf); 作用&#xff1a;查看文件的信息 man 2 stat/return value1、stat结构体&#xff1a; 2、sturct stat 结构体中 st_mode 的含义&#xff08;文件的类型和存取的权限&#xff09;: st_mo…

zabbix“专家坐诊”第237期问答

问题一 Q&#xff1a;在一台虚拟机安装了mysql数据库服务器上安装了agent&#xff0c;将MySQL by Zabbix agent模板联接上去了&#xff0c;但增加的mysql监控项&#xff0c;全部显示为不支持的&#xff0c;这是什么原因&#xff1f; A&#xff1a;这个是自定义脚本的形式&#…

IBM SPSS Statistics for Mac:强大的数据分析软件

IBM SPSS Statistics for Mac是一款功能强大的数据分析软件&#xff0c;专为Mac用户设计&#xff0c;提供了一系列专业的统计分析和数据管理功能。无论是科研人员、数据分析师还是学生&#xff0c;都能从中获得高效、准确的数据分析支持。 IBM SPSS Statistics for Mac v27.0.1…

【UI】element-ui的el-dialog的遮罩层在模态框的前面bug

最近在写element ui 的时候使用dialog组件&#xff0c;偶然出现了这种情况 原因&#xff1a; 是因为遮罩层插入进了body标签下&#xff0c;z-index高于当前父元素。 解决&#xff1a;在el-dialog标签里加上:modal-append-to-body"false"就可以了。 饿了么官网文档&a…

熊猫电竞赏金赛系统源码 APP+H5双端源码附搭建教程下载

熊猫电竞赏金系统简介 熊猫电竞赏金电竞系统 赏金赛源码&#xff0c;用户通过平台打比赛&#xff0c;赢了获得奖金奖励&#xff0c; 金币赛、赏金赛、vip赛等种赛事 可开王者荣耀、和平精英比赛 支持1v1、单排、双排组、战队排等多种比赛模式 支持QQ区、微信区 游戏玩的好…

大语言模型(LLM)漏洞爆发,AI模型无一幸免

本文概述了人工智能初创公司Anthropic于2024年04月03日发表的一篇针对人工智能安全的论文&#xff0c;该公司在本论文中宣布的一种新的“越狱”技术&#xff0c;名为Many-shot Jailbreaking&#xff08;多轮越狱&#xff09;。文章详细描述了目前大语言模型&#xff08;LLM&…

iOS 在OC旧项目中使用Swift进行混编

iOS 在OC旧项目中使用Swift进行混编 1、创建桥接文件 ​ 第一次在Swift创建OC文件&#xff0c;或者第一次OC创建Swift时&#xff0c;xcode会提示桥接&#xff0c;Creat Bridging Header即可,这个文件用于Swift调用OC文件&#xff0c;与OC调用Swift无关。 2、在TARGETS中设置D…

深入docker-swarm overlay网络模型

目录 1.简介 2.网络模型 3.docker_gwbridge网络 3.1.docker_gwbridge网关地址 3.2.检查docker_gwbridge网络 3.2.1.查找任务容器eth接口 3.2.2.查找ingress-sbox容器eth接口 4.检查ingress网络 4.1.检查ingress网络 4.2.检查ingress网络的命名空间 4.2.1.查找任务容…

LLM学习之自然语言处理简单叙述

自然语言处理基础 自然语言处理&#xff1a;让计算机读懂人所写好的这些文本&#xff0c;能够像人一样进行交互。 自然语言处理的任务和应用 任务&#xff1a; 词性标注 part of speech tagging 动词&#xff0c;名词&#xff0c;形容词&#xff1f; 命名实体的识别 name…

iOS OC项目中引入SwiftUI文件

iOS OC项目中引入SwiftUI文件 1、创建SwiftUI文件 2、第一次创建时&#xff0c;Xcode会提示桥接&#xff0c;选择 Creat Bridging Header即可。 3、创建swift管理类 /**在UIKit中使用SwiftUI&#xff0c;需要使用UIHostingController对SwiftUI进行包装&#xff0c;返回的是U…

uniapp自定义顶部导航栏

首先uniapp获取设备信息&#xff1a;uni.getSystemInfo或uni.getSystemInfoSync&#xff0c;可用于设置顶部安全区 留一个设备安全区的位置哦 然后在pages.json文件里配置自定义导航栏 {"pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a…

用友U8-Cloud api/hr接口存在SQL注入漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 U8 Cloud是由用友推出的新一代云ERP系统&#xff0…

【PhpStorm的环境配置与应用的简单介绍】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

国内开通chatgpt plus会员方法

ChatGPT镜像 今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像…

服务器如何开启远程连接?

服务器开启远程连接是网络管理中一项重要的功能。通过远程连接&#xff0c;用户可以在任何地方远程访问服务器&#xff0c;从而进行管理、维护和监控等操作。远程连接的开启可以为工作提供便利性和效率&#xff0c;但同时也带来了安全风险。确保远程连接的安全性和可靠性是至关…

C语言进阶课程学习记录- 递归函数分析

C语言进阶课程学习记录 - 递归函数分析 实验-递归计算字符串长度实验-斐波拉且数列实验小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 实验-递归计算字符串长度 #include <stdio.h>int strl…