当前位置: 首页 > 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是模型默认的主键字段。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 双指针算法
  • 力扣-200.岛屿数量
  • 广州城市信息模型(CIM)白皮书学习
  • 【iOS】暑假第二周——网易云APP 仿写
  • 【TwinCAT3教程】IEC61131-3编程基础
  • Yolov8添加ConvNetV1和V2模块
  • PostgreSQL数据库内核(二):通过initdb传递guc参数
  • [安洵杯 2019]easy_web1
  • 微信小程序接口实现语音转文字
  • 牛客周赛 Round 54 (c++题解)
  • 使用Echarts来实现数据可视化
  • python-查找元素3(赛氪OJ)
  • minio文件上传
  • 书籍去掉字符串中连续出现k个0的子串
  • Linux防火墙2
  • 收藏网友的 源程序下载网
  • golang中接口赋值与方法集
  • Javascript Math对象和Date对象常用方法详解
  • jquery ajax学习笔记
  • js数组之filter
  • Spring Boot快速入门(一):Hello Spring Boot
  • SSH 免密登录
  • Webpack 4x 之路 ( 四 )
  • 测试开发系类之接口自动化测试
  • 程序员最讨厌的9句话,你可有补充?
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 蓝海存储开关机注意事项总结
  • 人脸识别最新开发经验demo
  • 使用docker-compose进行多节点部署
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 线性表及其算法(java实现)
  • 最简单的无缝轮播
  • 2017年360最后一道编程题
  • Spring第一个helloWorld
  • 阿里云ACE认证学习知识点梳理
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • # 安徽锐锋科技IDMS系统简介
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)svelte 教程:hello world
  • (7)摄像机和云台
  • (k8s中)docker netty OOM问题记录
  • (八)Flink Join 连接
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (附源码)计算机毕业设计大学生兼职系统
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)