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


      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就创建成功了!

  • 相关阅读:
    2020 Python组蓝桥杯
    Servlet学习
    Tomcat学习
    数据库连接池
    MySQL的设计
    时间复杂度————被list.insert坑了
    PCA 算法核心:高维度向量向低维度投影
    初识Django,了解一下大概流程
    python编程基础之三十八
    python编程基础之三十七
  • 原文地址:https://www.cnblogs.com/lwjnicole/p/12324347.html
Copyright © 2020-2023  润新知