🧩 一、Django 模型的作用

Model 是 Django ORM(对象关系映射)的核心部分。
简单说,它让你可以用 Python 类 来操作数据库表,而不必写 SQL。

📘 举例:

from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()
    grade = models.CharField(max_length=10)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

💡 这个类就代表数据库中的一张 student 表。
每个字段(CharField, IntegerField 等)对应数据库中的一个列。


⚙️ 二、模型与数据库表的关系

Django模型类数据库表字段数据类型
CharField(max_length=100)VARCHAR(100)字符串
IntegerField()INT整数
BooleanField()BOOLEAN布尔
DateTimeField()DATETIME时间
ForeignKey()外键关联外键

默认表名是:

app名_模型类名小写

可以用 Meta 类修改表名等设置:

class Student(models.Model):
    ...
    class Meta:
        db_table = 'students'
        ordering = ['-created_at']


🚀 三、模型迁移流程(数据库同步)

1️⃣ 创建模型文件

# 在 models.py 中定义模型类

2️⃣ 生成迁移文件

python manage.py makemigrations

3️⃣ 执行迁移(写入数据库)

python manage.py migrate

4️⃣ 查看 SQL 语句

python manage.py sqlmigrate app_name 0001


🧠 四、模型数据操作(ORM用法)

✅ 1. 插入数据

student = Student(name="阿杰", age=20, grade="A")
student.save()

或简写:

Student.objects.create(name="李若萱", age=21, grade="B")


🔍 2. 查询数据

# 查询全部
Student.objects.all()

# 按条件查询
Student.objects.filter(grade="A")

# 查询单个(不存在会抛异常)
Student.objects.get(id=1)

# 模糊匹配
Student.objects.filter(name__contains="杰")

# 排序
Student.objects.order_by('-age')


🧩 3. 更新数据

student = Student.objects.get(id=1)
student.grade = "A+"
student.save()

或批量更新:

Student.objects.filter(grade="B").update(grade="B+")


🗑️ 4. 删除数据

student = Student.objects.get(id=1)
student.delete()

或:

Student.objects.filter(grade="C").delete()


🔗 五、模型之间的关系

Django 提供三种关系类型:

关系类型说明示例
ForeignKey一对多一个班级有多个学生
OneToOneField一对一一个用户对应一个资料
ManyToManyField多对多一个学生选多门课

📘 例子:

class Class(models.Model):
    name = models.CharField(max_length=50)

class Student(models.Model):
    name = models.CharField(max_length=100)
    classroom = models.ForeignKey(Class, on_delete=models.CASCADE)


💡 六、Meta 配置常用项

class Meta:
    db_table = 'students'       # 自定义表名
    ordering = ['-created_at']  # 默认排序
    verbose_name = "学生"
    verbose_name_plural = "学生列表"


🧾 七、常用命令汇总

命令功能
python manage.py makemigrations生成迁移文件
python manage.py migrate应用迁移
python manage.py shell进入 Django 交互环境
python manage.py dbshell打开数据库命令行
python manage.py inspectdb反向生成模型