Django二 模型设计

一、关于django生成的文件

在这里插入图片描述
其中face_django中的文件和manage.py是自动生成的;booktest是手动进行创建的。

二、ORM框架

就是我们写一个类,然后可以自动建表

O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。
使用django进行数据库开发的步骤如下:

1.在models.py中定义模型类
2.迁移
3.通过类和对象完成数据增删改查操作

1.首先先写BookInfo类:书名、时间

from django.db import models
class BookInfo(models.Model):
	bTitle=models.CharField(max_length=20)
	bpub_data=models.DateField()

2.对写的类进行迁移操作,生成数据表

1).生成迁移文件:根据模型类生成创建表的迁移文件。
python C:\Users\DELL\face__django\manage.py makemigrations
2).执行迁移:根据第一步生成的迁移文件在数据库中创建表。
python C:\Users\DELL\face__django\manage.py migrate

在这里插入图片描述其中id是自动生成的。
此时已完成数据表的自动创建

3.再写一个类,做两个类的关联

class HeroInfo(models.Model):
	hname=models.CharField(max_length=20)
	hgender=models.BooleanField(default=False)
	htext=models.CharField(max_length=100)
	# 让BookInfo类和HeroInfo类之间建立了一对多的关系。
	bid=models.ForeignKey('BookInfo',on_delete=models.CASCADE)

django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常: TypeError: init()
missing 1 required positional argument: ‘on_delete’

on_delete各个参数的含义如下:

on_delete=None,               # 删除关联表中的数据时,当前表与其关联的field的行为
on_delete=models.CASCADE,     # 删除关联数据,与之关联也删除
on_delete=models.DO_NOTHING,  # 删除关联数据,什么也不做
on_delete=models.PROTECT,     # 删除关联数据,引发错误ProtectedError
# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL,    # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')
on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
on_delete=models.SET,         # 删除关联数据,
 a. 与之关联的值设置为指定值,设置:models.SET(值)
 b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)

由于多对多(ManyToManyField)没有 on_delete
参数,所以以上只针对外键(ForeignKey)和一对一(OneToOneField)

4.由于又写了一个类,因此需要再次进行迁移操作,生成英雄对应的表,即0002_heroinfo.py
1).生成迁移文件:根据模型类生成创建表的迁移文件。

python C:\Users\DELL\face__django\manage.py makemigrations
2).执行迁移:根据第一步生成的迁移文件在数据库中创建表。
python C:\Users\DELL\face__django\manage.py migrate

三、针对数据进行的操作

在pycharm命令行输入

python C:\Users\DELL\face__django\manage.py shell

1.查询

BookInfo.objects.all()

<QuerySet []>

2.插入数据

from models import BookInfo,HeroInfo
b=BookInfo()
b.bTitle="射雕"
from datetime import date
b.bpub_data=date(1998,9,9)
b.save()

3.再次查询

BookInfo.objects.all()

<QuerySet [<BookInfo: BookInfo object (1)>]>
4.修改数据

b.bTitle="护栏"
b.save()

5.再次查询

b=BookInfo.objects.get(id=1) 

b.btitle

返回:‘护栏’
6.删除

b.delete()

7.关联操作
对HeroInfo添加数据

H=HeroInfo()
H.hname="黄蓉"
H.htext="sahdjsad"
h.bid=b

对BookInfo添加数据

b=BookInfo()
b.btitle='abc'
b.bpub_date=date(2017,1,1)
b.save()

查询关联数据(heroinfo_set 必须小写)
返回当前book对象的所有hero。

b.heroinfo_set.all()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值