📜  Django-模型(1)

📅  最后修改于: 2023-12-03 14:40:48.015000             🧑  作者: Mango

Django 模型

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_digitsdecimal_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)

在上面的代码中,我们定义了多个模型之间的关系。其中,BookAuthor 存在一对多的关系,MagazineAuthor 存在多对多的关系,UserProfileUser 存在一对一的关系。

结语

Django 模型是 Django 框架最核心的组成之一,它提供了一种定义数据模型的方式,并支持了多种数据类型和关系类型,使得我们能够更加方便地进行数据存储和管理。除此之外,Django 模型还提供了强大的查询 API 和数据库迁移机制,可以减轻开发人员的工作难度,提升开发效率。