Django Model.py数据库模型

本文介绍了一个基于Django实现的博客系统的搭建过程,包括数据库设计、模型定义等内容。重点讲解了如何利用Django的特性来实现博客文章的分类与标签功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们的博客初级版本主要包含这些数据:博客文章,文章会有分类以及标签。一篇文章只能有一个分类,但可以打上很多标签。数据库存储的数据其实就是表格的形式,例如存储我们的博客文章的数据库表长这个样子:
文章 id 标题 正文 发表时间 分类 标签
1 title1 text1 2016-12-23 django django 学习
2 title2 text2 2016-12-24 django django 学习
3 title3 text3 2016-12-26 Python Python 学习

分类 id 分类名
1 django
2 Python

标签 id 标签名
1 django 学习
2 Python 学习

from django.db import models
from django.contrib.auth.models import User


class Category(models.Model):
    """
    django 要求我们必须继承 models.Model 类,
    Category 只需要一个简单的分类名 name 就可以了。

    CharField 指定了 name 的数据类型,
    CharField 是字符型,
    max_length 指定其最大长度,
    超过这个长度的分类名就不能被存入数据库。

    当然 django 还为我们提供了各种各样的类型,
    如日期时间类型 DateTimeField、
    整数类型 IntegerField 等等。
    django 内置的类型全部类型可查看文档:
    https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types
    """
    name = models.CharField(max_length=100,verbose_name ='类别')

    class Meta:
        verbose_name = '类别'
        verbose_name_plural = '类别'

    def __str__(self):
        return self.name


class Tag(models.Model):
    """
    标签 Tag 也比较简单,
    和 Category 一样。
    再次强调一定要继承 models.Model 类!
    """
    name = models.CharField(max_length=100,,verbose_name ='标签')

    class Meta:
        verbose_name = '标签'
        verbose_name_plural = '标签'

    def __str__(self):
        return self.name


class article(models.Model):
    """
    文章的数据库表稍微复杂一点,主要是涉及的字段更多。
    """

    # 文章标题
    id = models.AutoField(primary_key=True,verbose_name ='编号')
    title = models.CharField(max_length=100,verbose_name ='标题')

    # 文章正文,我们使用了 TextField。
    # 比较短的字符串存储可以使用 CharField,
    # 但对于文章的正文来说可能会是一大段文本,
    # 因此使用 TextField 来存储大段文本。
    body = models.TextField(verbose_name ='正文')

    # 这两个列分表表示了文章的创建时间和最后一次修改时间,
    # 存储时间的列用 DateTimeField。
    created_time = models.DateTimeField(verbose_name ='创建时间')
    modified_time = models.DateTimeField(verbose_name ='修改时间')

    # 文章摘要,可以没有文章摘要,
    # 但默认情况下 CharField 要求我们必须存入数据,
    # 否则就会报错。
    # 指定 blank=True 后就可以允许空值了。
    excerpt = models.CharField(max_length=200, blank=True,,verbose_name ='摘要')

    # 这是分类与标签,
    # 分类与标签的模型我们已经定义在上面。
    # 我们在这里把文章对应的数据库表和分类与标签对应的表关联起来,
    # 但是关联形式稍微有点不同。
    # 我们规定一篇文章只能对应一个分类,
    # 但是一个分类下可以有很多篇文章,
    # 所以我们使用的是 ForeignKey,
    # 即一对多的关系。
    # 而对于标签来说,
    # 一篇文章可以有多个标签,
    # 同一个标签下也可能有多篇文章,
    # 所以我们使用 ManyToManyField,
    # 表明这是多对多的关系。
    # 同时我们规定文章可以没有标签,
    # 因此为标签 tags 指定了 blank=True。
    # 如果你对 ForeignKey、ManyToManyField 不了解,
    # 请看教程中的解释,
    # 亦可参考官方文档:
    # https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships
    type = models.ForeignKey(Category,verbose_name ='类别')
    tags = models.ManyToManyField(Tag, blank=True,,verbose_name ='标签')

    # 文章作者
    # 这里 User 是从 django.contrib.auth.models 导入的。
    # django.contrib.auth 是 django 内置的应用,
    # 专门用于处理网站用户的注册、登录等流程,
    # User 是 django 为我们已经写好的用户模型,
    # 这里我们通过 ForeignKey 把文章和 User 关联起来,
    # 因为我们规定一篇文章只能有一个作者,
    # 而一个作者可能会写多篇文章,
    # 因此这是一对多的关系,
    # 和 Category 类似。
        class Meta:
        verbose_name = '文章列表'
        verbose_name_plural = '文章列表'

    def __str__(self):
        return self.title
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值