django使用ORM方式建立操作数据表
ORM (Object Relational Mapping )把类映射成数据库中的表,把类的一个实例对象映射成数据库中的数据行,把类的属性映射成表中的字段,通过对象的操作对应到数据库表的操作,实现了对象到 SQL、SQL 到对象转换过程。
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 models
class Category(models.Model):
name = models.CharField(verbose_name='分类', max_length=100)
class Tags(models.Model):
name = models.CharField('标签', max_length=100)
class Article(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:创建模型 之间 的关联
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
def __str__(self):
return self.name
我们给每个类都增加了一个内部类Meta和str方法属性,刷新。
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
第四步:可以使用Django管理后台admin查看建立的应用
1、创建管理员帐号密码
创建一个管理员帐号
python manage.py createsuperuser
……
2、启动开发服务器
输入如下命令:
python manage.py runserver
在浏览器中访问
http://127.0.0.1:8000/admin/
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中建立自动管理界面,在类上加装饰器,把原注册的加注释,代码如下:
from django.contrib import admin
from .models import Article, Tags, Category
admin.site.register(Tags)
# admin.site.register(Article)
admin.site.register(Category)
@admin.register(Article)
class ArticleAdmin(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 = '测试知识内容平台'