🧩 一、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 | 反向生成模型 |
发表回复