当前位置: 首页 > news >正文

Django中的模型小总结:

from django.db import models
from django.urls import reverse# 自定义Manager方法
class HighRatingManager(models.Manager):def get_queryset(self):return super().get_queryset().filter(rating=1)# CHOICES选项
class Rating(models.IntegerChoices):VERYGOOD = 1, 'Very Good'GOOD = 2, 'Good'BAD = 3, 'Bad'class Product(models.Model):# 数据表字段name = models.CharField('name', max_length=30)rating = models.IntegerField(max_length=1, choices=Rating.choices)# MANAGERS方法objects = models.Manager()high_rating_products =HighRatingManager()# META类选项class Meta:verbose_name = 'product'verbose_name_plural = 'products'# __str__方法def __str__(self):return self.name# 重写save方法#原本(父类manager)的save方法于保存对象到数据库中def save(self, *args, **kwargs):do_something()#在保存对象之前执行某些操作super().save(*args, **kwargs) #调用了父类的 save 方法do_something_else()# 定义单个对象绝对路径def get_absolute_url(self):return reverse('product_details', kwargs={'pk': self.id})# 其它自定义方法def do_something(self):

1.自定义的manager方法:

用途:特定需求添加额外的查询逻辑或方法

创建一个继承自models.Manager的新类,然后在这个类中定义需要的自定义查询方法。

例子:

class HighRatingManager(models.Manager):def get_queryset(self):return super().get_queryset().filter(rating=1)
'''自定义一个类HighRatingManager继承models.Manager,并重写了get_queryset方法:返回评级(rating字段)为1的对象
其中:super().get_queryset()是调用父类Manager的get_queryset()方法;filter(rating=1)是对查询集的过滤操作。它告诉数据库只选择rating字段值为1的对象。
'''

 2.CHOICES选项:

用途:通常用于定义模型字段的可选值,它可以帮助限制字段的值,同时提供了在数据库中存储简短标识符而显示用户友好的文本描述的能力。

# CHOICES选项
class Rating(models.IntegerChoices):VERYGOOD = 1, 'Very Good'GOOD = 2, 'Good'BAD = 3, 'Bad'

每一个元组常量(等号前面大写的字符),有两个输入。第一个是选项即上面可见的1,2,3。第二个就是供用户看到的字符串(显示用户友好的文本描述的能力的体现)。

3.meta类选项:

作用:用于定义模型的元数据(metadata)

1.db_table:

指定模型映射到的数据库表的名称。

2.ordering:

指定模型在查询时的默认排序方式。

class Meta:ordering = ['name', '-rating']
#表示该模型按照name字段进行降序排列

3.manages:

默认为True,如果为False,Django 将不会为该模型管理数据库表。

4.permissions:

permissions = [('can_view', 'Can view model'),('can_change', 'Can change model'),
]
#'can_view' 和 'can_change' 是权限的代号(codename),它们是程序中引用这些权限的标识符。
#'Can view model' 和 'Can change model' 是这些权限的描述性名称,它们是显示给用户看的名称,通常用于用户界面和文档中。

4.数据表字段:

就是数据库里面的一列。分为基础字段和关系字段

1.基础字段:

  • CharField:用于存储较短的字符串,指定最大长度
models.CharField(max_length=100)  # 限制最大长度为100个字符
  • TextField:适用于存储较长的文本内容,没有最大长度限制,但是可以指定最大长度。
  • IntegerField, FloatField, DecimalField:分别用于存储整数、浮点数和固定精度的十进制数。
models.DecimalField(max_digits=8, decimal_places=2)
#最多8位数,小数点后2位
  • BooleanField:用于存储布尔值(True或False)
  • DateField, DateTimeField: 分别用于存储日期和日期时间。
  • EmailField: 用于存储电子邮件地址,自动验证格式。

要将普通字段设为必填字段,需要设置 blank=False或者null=False。

用default=''''设置默认值

2.关系字段:

  • ForeignKey: 用于定义多对一关系,将模型与另一个模型的主键关联起来。
class Author(models.Model):name = models.CharField(max_length=100)class Book(models.Model):title = models.CharField(max_length=200)author = models.ForeignKey(Author, on_delete=models.CASCADE)
#这个多对一的关联,一个作者可以对应多本书。on_delete=models.CASCADE表示当书被删除的时候,与之关联的作者也被删除
#'product_details'应该是在URL配置中定义的一个名字,与某个路径相关联,并且这个路径应该接受一个主键参数来显示特定产品的细节。
  • ManyToManyField: 用于定义多对多关系,允许一个模型关联多个目标模型实例
  • OneToOneField:用于定义一对一关系,每个对象实例关联到另一个唯一的对象实例。

5.manager方法:

可以包含继承的manger方法也可以引入自定义的manager方法

6.__str__方法:

当你使用 str() 函数或者在打印对象时候,会调用对象的 __str__ 方法来获取该对象的字符串表示形式(这里是对象的name属性)。(对象就是数据库里面的一行)

7.定义单个对象绝对路径:

 # 定义单个对象绝对路径def get_absolute_url(self):return reverse('product_details', kwargs={'pk': self.id})
#reverse 函数是 Django 提供的一个反向解析 URL 的工具,它接受一个视图的名称(path函数里面的name)和必要的参数(同一个name下不允许重复)来生成对应的 URL。

id是模型默认的主键字段。

http://www.lryc.cn/news/418008.html

相关文章:

  • 深入理解 RDMA 的软硬件交互机制
  • 轻优图片编辑压缩官网 轻优图片编辑压缩
  • 封装el-table 基于element封装可配置JSON表格组件
  • Springboot 开发之 Quartz 任务调度框架简介
  • 详解Xilinx FPGA高速串行收发器GTX/GTP(4)--TX/RX接口的数据位宽和时钟设计
  • idea个人常用快捷键设置
  • 超实用 不再担心猫咪掉毛 一文教你养宠家庭空气净化器怎么选
  • 深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
  • 如何在印尼新闻媒体发布新闻稿件:通稿宣发的好处
  • 如何在 Linux 系统上更改 SSH 服务端口以增强服务器安全性
  • c++11新特性 -nullptr
  • kubernets学习笔记——Kubernets 命令行工具 kubectl
  • Hadoop单机及集群部署
  • 使用es-hadoop同步hive和es之间数据
  • Java - 泛型 + JUnit
  • vue3实现包含表格的Word文件导出
  • 【深度学习】TTS,CosyVoice,推理部署的代码原理讲解分享
  • flask高频面试题
  • 尚硅谷谷粒商城项目笔记——五、使用docker安装mysql
  • filebeat + logstash使用笔记
  • 学校考场电子钟设置自动开关机,节能环保
  • 短剧APP系统开发带来了哪些发展空间?
  • PaddlePaddle / PaddleOCR踩坑记,动手实现一个OCR服务器
  • JeecgBoot低代码平台简单记录
  • 零基础入门转录组数据分析——机器学习算法之xgboost(筛选特征基因)
  • C#开发常见面试题三(浅复制和深复制的区别)
  • Linux/C 高级——Linux命令
  • 怎么在 tailwindcss 项目中自定义一些可复用的样式
  • 在vue3中 引入echarts
  • 栈和队列(数据结构)