ORM

997 阅读3分钟

Django中内嵌了ORM框架,ORM框架可以将类和数据表进行对应起来,只需要通过类和对象就可以对数据表进行操作。 在Django中主要是设计类:模型类。 ORM另外一个作用:根据设计的类生成数据库中的表。

模型类设计

在应用models.py中设计模型类。

注意: 必须继承与models.Model类 在应用里面

models.py的文件内容

from django.db import models
# 设计和表对应的类, 模型类
# Create your models here.

# 在Django里面不需要我们自己定义id主键, 会帮我们自动生成

# 图书类
class BookInfo(models.Model):
	"""图书模型类"""
	# btitle: 图书名称
	# charField: 说明是一个字符串
	# max_length: 制定字符串最大的长度
	btitle = models.CharField(max_length=20)
	# 出版日期 
	# DateField: 说明是一个日期的类型
	bpub_date = models.DateField()

模型类生成表

生成迁移文件

  1. 生成迁移文件
python manage.py makemigrations

迁移文件是根据模型类生成的。

  1. 执行迁移生成表

根据迁移文件生成表。 生成表名的默认格式: 应用名_模型类名小写

python manage.py makemigrations

在Django中的settings.py文件中,我们可以看到默认使用的是sqlite3数据库, 主要使用在移动端

我们查看当前有自动生成db.sqlite3这个数据库

在Mac下, 我们可以使用Navicate这个软件打开数据库

通过模型类操作数据表

进入项目shell的命令:

python manage.py shell

以下为在相互shell终端中演示的例子: 首先导入模型类:

from booktest.models import BookInfo,HeroInfo
# 向booktest_bookinfo表中插入一条数据。
b = BookInfo()  # 定义一个BookInfo类的对象
b.btitle ='天龙八部'  # 定义b对象的属性并赋值
b.bpub_date = date(1990,10,11) 
b.save()  # 才会将数据保存进数据库
# 查询出booktest_bookinfo表中id为1的数据。 BookInfo.objects.get 这是我们的查找
b = BookInfo.objects.get(id=1) 
# 在上一步的基础上改变b对应图书的出版日期。需要改变的话直接赋值然后再次保存数据即可
b.bpub_date = date(1989,10,21)
b.save()  # 才会更新表格中的数据
# 紧接上一步,删除b对应的图书的数据。
b.delete()  # 才会删除
# 向booktest_heroInfo表中插入一条数据。
h = HeroInfo()
h.hname = '郭靖'
h.hgender = False
h.hcomment = ‘降龙十八掌’
b2 = BookInfo.objects.get(id=2)
h.hbook = b2  # 给关系属性赋值,英雄对象所属的图书对象
h.save() 
#  查询图书表里面的所有内容。
BookInfo.objects.all()
HeroInfo.objects.all()

quit()  # 可以退出当前shell编辑模式

关联操作

查询出id为2的图书中所有英雄人物的信息。

b = BookInfo.objects.get(id=2)
b.heroinfo_set.all()  # 查询出b图书中所有英雄人物的信息

后台管理

本地化

  1. 语言和时区的本地化。 修改settings.py文件。

  1. 创建管理员
python manage.py createsuperuser

地址是: http://127.0.0.1:8000/admin

  1. 注册模型类 在应用下的admin.py中注册模型类。

    告诉djang框架根据注册的模型类来生成对应表管理页面。

from django.contrib import admin
from booktest.models import BookInfo
# 后台管理相关文件
# Register your models here.
# 注册模型类
admin.site.register(BookInfo)
b = BookInfo()

str(b) __str__

这样我们在Django的后台管理页面就可以看到这样的可以显示我们自己定义的显示内容

为了展示更多的表如下图

我们需要在admin.py去注册这个模型类,前提需要导入这个模块下的模型类

如果在界面上我们想看到更多模型的信息我们就需要自定义模型管理类, 如下图这样的界面, 在这里我遇到一个问题,就是添加书籍的时候回出现错误,最后我查一下有说是python3.7版本的问题,最后我就换成了3.6版本发现是可以的.

我们需要这样自定义