即定义博客的数据模型,这里模型表示为一个python类,并且继承自django.db.models.Model
,其中的每个属性视为一个数据库字段。
Django对每个模型(类)创建一个表,当创建一个模型时,Django提供了一个实用的API,从而可方便地查询数据库中的对象。
这里我们定义一个Post模型,代码如下:
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'Draft'),
('published', 'Published'),
)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250,
unique_for_date='publish')
author = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name='blog_posts')
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10,
choices=STATUS_CHOICES,
default='draft')
class Meta:
ordering = ('-publish',)
def __str__(self):
return self.title
- title表示为帖子标题
- slug字段用于URL中。作为一种简短的标记,slug仅包含字母/数字/下划线及连字符。之前曾向该字段添加了unique_for_date参数,进而可采用发布日期和slug对帖子构建URL.
- author字段表示为一个外键,并定义了多对一的关系。
- body表示帖子的主体
- publish表示帖子的发布日期,此处使用了Django的时区now方法作为默认值,并以时区格式返回当前日期。我们可将其视为Python标准方法datetime.now的时区版本。
- created表示帖子的创建时间。此处采用了auto_now_add,当创建某个对象时,日期将被自动更新。
- updated表示帖子最后一次更新的时间。此处采用了auto_now,当保存某个对象时,日期被自动更新。
- status表示帖子的状态。由于使用了choices参数,因而该字段值仅设置为既定方案中的某一个方案,也就是最前面定义的STATUS_CHOICES参数
Django中包含了不同的字段类型,并以此定义定义模型。可以访问https://docs.djangoproject.com/en/3.0/ref/models/fields/以查看所有的字段类型。
模型内的Meta类包含了元数据。在默认状态下,当查询元数据时,将通知Django对publish字段中的结果以降序排序(通过负号前缀,可指定降序排序)。据此,最新发布的帖子将首先被显示。
__str__()方法为默认的人们可读的对象表达方式,Django将在多处对其加以使用,加管理站点。
一、激活应用程序
编辑settings.py文件,并向INSTALLED_APPS设置中添加blog.apps.BlogConfig,如下所示:
二、设置并使用迁移方案
1.首先针对Post模型创建初始迁移,生成了一个0001_initial.py文件,可以打开此文件查看迁移结果。
python manage.py makemigrations blog
2.接下来将数据库与新模型同步
python manage.py migrate
此外,我们可以通过下面命令,来查看Django在数据库中执行的SQL代码内容。sqlmigrate命令将使用到迁移名称并在不执行SQL语句的情况下返回其SQL。
python manage.py sqlmigrate blog 0001
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END