📅  最后修改于: 2023-12-03 14:40:48.015000             🧑  作者: Mango
Django 模型是 Django 框架中最核心也是最基础的模块之一,它提供了一种定义应用数据模型的方法。模型定义是基于 Python 类的,它包含了数据模型的结构和行为,也提供了数据存取的接口。
模型定义通常存放在 Django 应用的 models.py
文件中。下面是一个简单的模型定义:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
summary = models.TextField()
pub_date = models.DateField()
price = models.DecimalField(max_digits=7, decimal_places=2)
def __str__(self):
return self.title
在上面的代码中,我们定义了一个 Book
类,它继承自 models.Model
,这个基类提供了大量的 API,可以帮助我们定义数据模型的属性以及相关的行为,其中最基本的属性包括:
CharField(max_length)
:字符型字段,表示存储有限长度字符串的字段,max_length
是必选参数。TextField()
:文本型字段,用于存储大量文本数据。DateField()
:日期型字段,用于存储日期类型的数据。DecimalField(max_digits, decimal_places)
:十进制型字段,用于存储精确的浮点数,max_digits
和 decimal_places
都是必选参数。Django 模型定义不仅仅是用来描述数据模型的,它还提供了一个叫做数据库迁移的机制,用于将模型定义映射到数据库中。为了完成数据模型的创建和维护,Django 使用了一套自己的迁移系统,当我们对模型进行修改时,Django 会自动计算出数据库结构的变化,并生成相应的迁移文件。
以下是一些常用的数据库迁移命令:
# 创建新模型的迁移文件
python manage.py makemigrations
# 应用已有的迁移文件
python manage.py migrate
# 回滚上一个迁移
python manage.py migrate <app-name> <migration-name>
# 查看模型和数据库的差异
python manage.py sqlmigrate <app-name> <migration-name>
Django 模型提供了非常强大和灵活的查询 API,可以对数据进行筛选、排序、分组等操作。下面是一些常用的查询示例:
# 查询所有图书信息
Book.objects.all()
# 查询价格大于 50 的图书
Book.objects.filter(price__gt=50)
# 查询作者为 "James" 的图书
Book.objects.filter(author="James")
# 查询发布时间为 2022 年的图书
Book.objects.filter(pub_date__year=2022)
# 按价格降序排序
Book.objects.order_by("-price")
# 按作者分组
Book.objects.values("author").annotate(models.Count("id"))
# 获取单个对象
Book.objects.get(id=1)
Django 模型支持多种类型的关系,比如一对多、多对多、一对一等等。下面是一些使用关系的示例:
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)
class Magazine(models.Model):
name = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField()
class User(models.Model):
name = models.CharField(max_length=100)
在上面的代码中,我们定义了多个模型之间的关系。其中,Book
和 Author
存在一对多的关系,Magazine
和 Author
存在多对多的关系,UserProfile
和 User
存在一对一的关系。
Django 模型是 Django 框架最核心的组成之一,它提供了一种定义数据模型的方式,并支持了多种数据类型和关系类型,使得我们能够更加方便地进行数据存储和管理。除此之外,Django 模型还提供了强大的查询 API 和数据库迁移机制,可以减轻开发人员的工作难度,提升开发效率。