首页 > 其他 > 详细

Django项目创建数据模型(Model)

时间:2020-02-18 09:07:42      阅读:67      评论:0      收藏:0      [点我收藏+]

  Django是通过Model来操作数据库的,无论我们使用的是mysql还是sqlite3,Django都会帮我们自动生成相应数据库类型的sql语句,所以我们不需要关注sql语句和类型,Django会帮我们自动生成,我们只需要会写model就可以了。

  Django根据代码中编写的类来自动生成数据库表。我们写的类表示数据库的表。

  基本原则:

  • 每个模型在Django中表现为一个Python类
  • 每个模型都是继承自django.db.models.Model,都是django.db.models.Model的子类
  • 模型里的每个类都代表着数据库中的一个表
  • 模型的每个字段(属性)都代表着数据库表中的某一列
  • Django会自动生成访问数据库的API

 

下面我们以博客项目为例,经过分析,完成博客项目我们需要存储六种数据:文章分类、文章、文章标签、幻灯图、推荐位、友情链接。每种数据一个表。

from django.db import models
from django.contrib.auth.models import User 
#导入Django自带用户模块

# 文章分类
class Category(models.Model):
    name = models.CharField(博客分类, max_length=100)
    index = models.IntegerField(default=999, verbose_name=分类排序)

    class Meta:
        verbose_name = 博客分类
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name
#文章标签
class Tag(models.Model):
    name = models.CharField(文章标签,max_length=100)
    class Meta:
        verbose_name = 文章标签
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name
#推荐位
class Tui(models.Model):
    name = models.CharField(推荐位,max_length=100)

    class Meta:
        verbose_name = 推荐位
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

#文章
class Article(models.Model):
    title = models.CharField(标题, max_length=70)
    excerpt = models.TextField(摘要, max_length=200, blank=True)
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, verbose_name=分类, blank=True, null=True)
     #使用外键关联分类表与分类是一对多关系
    tags = models.ManyToManyField(Tag,verbose_name=标签, blank=True)
    #使用外键关联标签表与标签是多对多关系
    img = models.ImageField(upload_to=article_img/%Y/%m/%d/, verbose_name=文章图片, blank=True, null=True)
    body = models.TextField()
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=作者)
     """
     文章作者,这里User是从django.contrib.auth.models导入的。
     这里我们通过 ForeignKey 把文章和 User 关联了起来。
     """
    views = models.PositiveIntegerField(阅读量, default=0)
    tui = models.ForeignKey(Tui, on_delete=models.DO_NOTHING, verbose_name=推荐位, blank=True, null=True)
    
    created_time = models.DateTimeField(发布时间, auto_now_add=True)
    modified_time = models.DateTimeField(修改时间, auto_now=True)

    class Meta:
        verbose_name = 文章
        verbose_name_plural = 文章

    def __str__(self):
        return self.title

#Banner
class Banner(models.Model):
    text_info = models.CharField(标题, max_length=50, default=‘‘)
    img = models.ImageField(轮播图, upload_to=banner/)
    link_url = models.URLField(图片链接, max_length=100)
    is_active = models.BooleanField(是否是active, default=False)

    def __str__(self):
        return self.text_info

    class Meta:
        verbose_name = 轮播图
        verbose_name_plural = 轮播图


#友情链接
class Link(models.Model):
    name = models.CharField(链接名称, max_length=20)
    linkurl = models.URLField(网址,max_length=100)

    def __str__(self):
        return self.name
    class Meta:
        verbose_name = 友情链接
        verbose_name_plural = 友情链接

其中,文章与分类是一对多的关系,文章与标签是多对多的关系,文章与作者是一对多的关系,文章与推荐位是一对多的关系;

上面Article类中的img表示图片封面字段,article_img/为上传目录,%Y/%m/%d/为自动在上传的图片上加上文件上传的时间。

完成上面的model编写之后,我们仅仅是完成了model的代码编写,但是这些模型并没有真正的在数据库中创建表,我们接下来就需要进行数据库迁移!

  在进行数据库迁移之前我们需要先配置Django项目使用MySQL数据库(如果使用默认的数据库那就不用配置了),mysql配置请参考:Django项目如何使用mysql数据库  

在数据库配置好之后,我们就可以来进行数据库迁移啦!数据库迁移非常的简单,只需要执行以下命令即可:

python3 manage.py makemigrations
python3 manage.py migrate

迁移的时候可能会提示需要安装Pillow,出现这个错误的原因是因为我们的Article和Banner类使用了图片字段ImageField,我们需要用到图片处理包,按照错误提示执行安装Pillow模块就可以了:

pip3 install Pillow

Pillow模块安装成功之后,再执行迁移数据库:

技术分享图片

数据库迁移成功之后,程序会在blog下的migrations目录里自动生成几个000开头的文件,文件里面记录着数据库迁移记录: 技术分享图片

 数据库迁移后查看数据库中表,表名默认为:应用名称_模型名称:

技术分享图片

 至此,我们的模型model就创建成功了!

Django项目创建数据模型(Model)

原文:https://www.cnblogs.com/lwjnicole/p/12324347.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!