django使用ORM方式建立操作数据表
ORM (Object Relational Mapping )把类映射成数据库中的表,把类的一个实例对象映射成数据库中的数据行,把类的属性映射成表中的字段,通过对象的操作对应到数据库表的操作,实现了对象到 SQL、SQL 到对象转换过程。
image.png
image.png
1、model模型第一步:设计模型
完成博客,我们需要存储三种数据。文章分类、文章、文章标签。
1、分类表结构设计:
表名:Category、分类名:name (科技,教学,游戏,动漫)
2、标签表设计:
表名:Tags、标签名:name (俄乌局势,360报告)
3、文章表结构设计:
表名:Article、标题:title、摘要:intro、分类:category、标签:tags、内容:body、创建时间:created_time、作者:author
其中:
分类和文章是一对多的关系,标签和文章是多对多的关系,作者和文章是一对多的关系。
2、模型第二步
1:创建模型
blog/models.py
from django.db import modelsclassCategory(models.Model):name=models.CharField(verbose_name='分类',max_length=100)classTags(models.Model):name=models.CharField('标签',max_length=100)classArticle(models.Model):title=models.CharField('文章标题',max_length=70)intro=models.TextField('文章内容',max_length=200,blank=True)created_time=models.DateTimeField(‘发布时间',auto_now_add=True)
2:创建模型 之间 的关联
image.png
from django.contrib.auth.models import User
category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='分类', default='1')
tags = models.ManyToManyField(Tags, blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='作者')
3:元数据改中文匹配,其他类同
class Category(models.Model):
name = models.CharField('分类',max_length=100)
#下面为新增代码,
class Meta:
verbose_name = '分类'
verbose_name_plural = verbose_name
defstr(self):
return self.name
我们给每个类都增加了一个内部类Meta和str方法属性,刷新。
image.png
4:在文章中增加字段:
keywords=models.CharField('文章关词',max_length=120,blank=True,null=True)views=models.PositiveIntegerField('阅读量',default=0)top=models.IntegerField(choices=[(0,'否'),(1,'是'),],default=0,verbose_name='是否推荐')modified_time=models.DateTimeField('修改时间',auto_now=True)
模型第三步:迁移数据
数据模型设计好之后,我们就需要迁移数据到数据库。
创建模型文件:只是创建了一个对象的数据文件,为改动创建迁移记录;python manage.py makemigrations
迁移数据:把表结构在数据库中建立,将操作同步到数据库
python manage.py migrate
image.png
第四步:可以使用Django管理后台admin查看建立的应用
1、创建管理员帐号密码
创建一个管理员帐号
python manage.py createsuperuser
……
image.png
2、启动开发服务器
输入如下命令:
python manage.py runserver
在浏览器中访问
3、在admin下注册blog应用
打开blog/admin.py文件,加入如下内容:
from django.contrib import admin
from .models import Article,Tags,Category
admin.site.register(Tags)
admin.site.register(Article)
admin.site.register(Category)
刷新页面,我们就能看到blog这个应用了。
4、Django 管理应用blog
Django 最强大的部分之一是自动管理界面。它从你的模型中读取元数据,提供一个快速的、以模型为中心的界面,受信任的用户可以管理你网站上的内容。管理的推荐使用范围仅限于一个组织的内部管理工具。
在admin.py中建立自动管理界面
classArticleAdmin(admin.ModelAdmin):# 界面显示的列list_display=('id','category','title','user','views','created_time')#list_per_page设置每页显示多少条记录,默认是100条list_per_page=50#ordering设置默认排序字段,负号表示降序排序ordering=('-created_time',)#fk_fields 设置显示外键字段fk_fields=['category']# 设置id字段可以点击进入编辑界面list_display_links=['id']# 指定标题title做为搜索字段search_fields=['title']list_filter=['user']# 右侧栏过滤器,按作者进行筛选date_hierarchy='created_time'# 详细时间分层筛admin.site.site_header='内容管理后台'admin.site.site_title='测试知识内容平台'