目录

Python学习第十八天

Python学习第十八天

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_digitsdecimal_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指定文件上传的目录(用于 FileFieldImageField )。
on_delete指定外键关联的对象被删除时的行为(如 CASCADESET_NULL 等)。

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

from django.db import models

class 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大家自己创建下 按照上面的命令

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 会生成一个迁移文件,记录这些变更。

https://i-blog.csdnimg.cn/direct/f11296730dcc4191bfeab32aa1bda618.png

product例子生成表名:myapp_product

https://i-blog.csdnimg.cn/direct/587790a69b1648078dda549496645bb3.png

makemigrationsmigrate 的关系

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

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

  • 流程:

    1. 修改模型(如添加字段、修改字段类型等)。
    2. 运行 python manage.py makemigrations ,生成迁移文件。(注意如果说有报错需要查看自己的settings.py中是否包含INSTALLED_APPS是否包含了myapp)
    3. 运行 python manage.py migrate ,将迁移应用到数据库(可以查看数据库中建立的表,生成的表是app名称_对象名)。