Python学习第十八天

server/2025/3/18 15:59:02/

Django模型

  • 定义:模型是 Django 中用于定义数据库结构的 Python 类。每个模型类对应数据库中的一张表,类的属性对应表的字段。

  • 作用:通过模型,Django 可以将 Python 代码与数据库表结构关联起来,开发者无需直接编写 SQL 语句即可操作数据库。

常用字段

字段类型说明示例
CharField用于存储较短的字符串,必须指定 max_lengthname = models.CharField(max_length=100)
TextField用于存储大段文本,不需要指定最大长度。description = models.TextField()
IntegerField用于存储整数。age = models.IntegerField()
BooleanField用于存储布尔值(True/False)。is_published = models.BooleanField(default=False)
DateField用于存储日期(年月日)。birth_date = models.DateField()
DateTimeField用于存储日期和时间。created_at = models.DateTimeField(auto_now_add=True)
EmailField用于存储电子邮件地址,会自动验证格式。email = models.EmailField(max_length=254)
URLField用于存储 URL,会自动验证格式。website = models.URLField(max_length=200)
DecimalField用于存储固定精度的十进制数,需指定 max_digits 和 decimal_placesprice = models.DecimalField(max_digits=10, decimal_places=2)
FloatField用于存储浮点数。rating = models.FloatField()
ForeignKey用于定义多对一关系,指向另一个模型。author = models.ForeignKey(Author, on_delete=models.CASCADE)
OneToOneField用于定义一对一关系。profile = models.OneToOneField(Profile, on_delete=models.CASCADE)
ManyToManyField用于定义多对多关系。tags = models.ManyToManyField(Tag)
FileField用于上传文件。file = models.FileField(upload_to='uploads/')
ImageField用于上传图片,继承自 FileField,会自动验证是否为图片。photo = models.ImageField(upload_to='photos/')
UUIDField用于存储 UUID(通用唯一标识符)。id = models.UUIDField(primary_key=True, default=uuid.uuid4)
AutoField自动递增的整数字段,通常用于主键。id = models.AutoField(primary_key=True)
BigAutoField类似 AutoField,但支持更大的范围(64 位整数)。id = models.BigAutoField(primary_key=True)
SlugField用于存储短标签(URL 友好的字符串),通常用于 URL。slug = models.SlugField(unique=True)
BinaryField用于存储二进制数据。data = models.BinaryField()
DurationField用于存储时间间隔(如天数、小时数等)。duration = models.DurationField()
GenericIPAddressField用于存储 IPv4 或 IPv6 地址。ip_address = models.GenericIPAddressField()
JSONField用于存储 JSON 数据。metadata = models.JSONField()

常用参数

参数说明
max_length指定字段的最大长度(如 CharField)。
null如果为 True,数据库中将允许存储 NULL 值。
blank如果为 True,字段在表单中可以为空。
default指定字段的默认值。
unique如果为 True,字段值必须在表中唯一。
primary_key如果为 True,该字段将作为模型的主键。
choices提供一个可选的选项列表(如 GENDER_CHOICES = [('M', 'Male'), ('F', 'Female')])。
auto_now每次保存对象时自动设置为当前时间(常用于 DateTimeField)。
auto_now_add对象第一次创建时自动设置为当前时间(常用于 DateTimeField)。
upload_to指定文件上传的目录(用于 FileField 和 ImageField)。
on_delete指定外键关联的对象被删除时的行为(如 CASCADESET_NULL 等)。

注意:id 字段会自动生成,无需显式定义(Django 默认会添加一个自增的 id 主键,如果不是这种情况需要手动添加字段)

python">from django.db import modelsclass User(models.Model):username = models.CharField(max_length=100, unique=True)password = models.CharField(max_length=100)email = models.EmailField(unique=True)first_name = models.CharField(max_length=100)last_name = models.CharField(max_length=100)def __str__(self):return self.username

举个例子models中添加一个商品 类中有id(自动生成)、name、code、price、crate_time、update_time大家自己创建下 按照上面的命令

python">class Product(models.Model):# id 字段会自动生成,无需显式定义(Django 默认会添加一个自增的 id 主键)name = models.CharField(max_length=100, verbose_name="商品名称")code = models.CharField(max_length=50, unique=True, verbose_name="商品编码")price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="商品价格")create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")

Migrations

  • 定义:迁移是 Django 用来管理数据库模式变更的机制。每次修改模型后,Django 会生成一个迁移文件,记录模型的变化。

  • 作用:迁移文件允许你将数据库模式从一种状态更新到另一种状态,同时保留现有数据。

  • 生成迁移文件:使用 python manage.py makemigrations 命令,Django 会检测模型的变更,并生成相应的迁移文件。

    • 例如,修改user模型后,运行 makemigrations 会生成一个迁移文件,记录这些变更。

product例子生成表名:myapp_product

makemigrations 和 migrate 的关系

  • makemigrations:生成迁移文件,记录模型的变更。

  • migrate:应用迁移文件,将变更同步到数据库中。

  • 流程:

    1. 修改模型(如添加字段、修改字段类型等)。

    2. 运行 python manage.py makemigrations,生成迁移文件。(注意如果说有报错需要查看自己的settings.py中是否包含INSTALLED_APPS是否包含了myapp)

    3. 运行 python manage.py migrate,将迁移应用到数据库(可以查看数据库中建立的表,生成的表是app名称_对象名)。

文章来源:https://blog.csdn.net/weixin_37813118/article/details/146299416
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/server/175997.html

相关文章

网页制作代码html制作一个网页模板

制作一个简单而实用的网页模板:HTML基础入门 在数字时代,网页已成为信息展示和交流的重要平台。HTML(HyperText Markup Language)作为网页制作的基础语言,为开发者提供了构建网页的基本框架。本文将带你了解如何使用H…

【Spring】第二弹:通过反射机制初步理解 IoC

一、Java 反射机制 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机…

Ubuntu 常用指令手册

📁 文件/目录操作 1. 基础操作 # 递归复制目录(含子目录) cp -r source_dir/ target_dir/# 递归删除目录(强制删除不提示) rm -rf dir_name/# 查看当前路径 pwd# 创建多级目录 mkdir -p parent_dir/child_dir2. 权限…

正则表达式小结

正则表达式是一种用于描述文本模式的特殊字符串,它由一系列字符和特殊字符组成,用于匹配和操作文本数据。下面是正则表达式的一些常见规则: 字符匹配: 普通字符:正则表达式中的普通字符(字母、数字、符号&a…

vue-router实现

实现一个简化版的 vue-router 可以帮助我们更好地理解 Vue 路由是如何工作的。Vue Router 主要的功能是基于浏览器的 URL 来管理组件的显示,能够根据 URL 变化切换不同的视图。下面是一个简化版的实现,用于帮助你理解基本的路由机制。 创建一个简单的 V…

【Python · Pytorch】Conda介绍 DGL-cuda安装

本文仅涉及DGL库介绍与cuda配置,不包含神经网络及其训练测试。 起因:博主电脑安装了 CUDA 12.4 版本,但DGL疑似没有版本支持该CUDA版本。随即想到可利用Conda创建CUDA12.1版本的虚拟环境。 1. Conda环境 1.1 Conda环境简介 Conda&#xff1…

基于ssm的电子病历系统(全套)

一、系统架构 前端:jsp | bootstrap | jquery 后端:spring | springmvc | mybatis 环境:jdk1.8 | mysql | maven | tomcat | idea 二、代码及数据库 三、功能介绍 01. 登录 02. 主页 03. 管理员-个人中心-修改密码…

uniapp scroll组件下拉刷新异步更新数据列表

前言 如图所示,下拉刷新,更新聊天列表。 开始 设置refresher-enabled“true”,开启自定义下拉刷新 设置refresher-default-style和refresher-background,可以自定义下拉刷新的样式 refresherrefresh为监听自定义下拉刷新被触发…