在 Django 中,Models 是用来对应数据库表结构的。Models 包含了表名、字段、索引等定义信息,它们被封装在一个 Python 类当中。在定义 Models 时,我们可以使用 Django 提供的一些字段类型、关系类型等。
下面是一个定义一个简单的 BlogModels 的例子,其包含两张表:文章(Post)和分类(Category)。
from django.db import models
class Category(models.Model):
name = models.CharField(max_length = 32, verbose_name = '分类名称')
create_time = models.DateTimeField(auto_now_add=True, verbose_name = '创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name = '更新时间')
class Post(models.Model):
title = models.CharField(max_length=256, verbose_name = '文章标题')
content = models.TextField(verbose_name = '文章内容')
create_time = models.DateTimeField(auto_now_add=True, verbose_name = '创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name = '更新时间')
category = models.ForeignKey(Category, verbose_name='分类', on_delete=models.CASCADE, null=True, blank=True)
在上面的例子中,我们定义了两个 Django Models,分别对应数据库中的两张表:Category 和 Post。它们继承了 Django 的 models.Model 类,其中 Category 包含了三个字段,即分类名称、创建时间和更新时间,而 Post 包含了四个字段,即文章标题、文章内容、创建时间、更新时间和外键(ForeignKey)。其中外键关联了 Category 模型,表示文章所属的分类。ForeignKey 的 on_delete 选项表示当与之相关联的 Category 记录被删除时,应该如何处理该外键关联的记录。
使用字符串作为范例,我们可以用模型 Post 为例子来演示一下怎么用 Django Models 定义数据库表:
class Post(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
pub_date = models.DateField(auto_now=True)
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
def __str__(self):
return self.title
上面的代码中,我们定义了一个 Post 模型,包含如下字段:标题(title)、内容(content)、发布日期(pub_date)、作者(author)。其中,title 和 content 字段使用了 CharField 和 TextField 类型,分别表示字符型和文本型。pub_date 使用了 DateField 类型,表示日期型。ForeignKey 用来表示模型间的关联,它将作者模型 User 与 Post 模型关联起来。在模型中我们还定义了 str() 方法,用来在后台管理页面中显示一个对象的字符串表示。