django 3,django笔记
学习笔记,仅供参考。
本文以目录数据表关联映射一对多映射外键关联外键构造函数为例。
数据表关联映射
一对多映射
一对多是指现实事物之间的一对多对应关系。比如一个学生只能属于一个班级,一个班级可以有多个学生;一本书只能属于一家出版社,一家出版社允许多本书出版。
语法一个类对象可以与多个B类对象相关联。
A级(型号。型号):
及格
B级(型号。型号):
属性=模型。ForeignKey(模型类,)
关联外键外键
构造了外键的参数on_delete(to,on _ delete,* * options)。
模特。串联
#级联删除。如果设置了该参数值,当主对象被删除时,其关联的从属对象将被同时删除。
模特。保护
#如果我们在主对象有关联对象时删除它,我们将抛出一个ProtectedError来阻止它被删除;
SET_NULL
#当主对象被删除时,从对象指向null。
设置默认值
#将ForeignKey设置为其默认值;必须设置ForeignKey的默认值。
* *选项是常用的字段选项。
空
独一无二的
#等待
例如
定义一对多模型. py
从django.db导入模型
#在此创建您的模型。
类发行者(模型。型号):
名称=型号。CharField(出版社名称,max_length=50,null=True)
图书编号=models.positiveintgerfield(第一版图书的总数,默认值=0)
Tele=模型。CharField(联系号码,max_length=11,null=False)
类别元:
db_table=china_publisher
verbose_name=ChinaPublisher
verbose _ name _ plural= China publishers
def __str__(self):
String=发布者:%s% (self.name)
返回字符串
课堂用书(模型。型号):
标题=模型。CharField (title ,max_length=30)
ExfacPrice=型号。DecimalField(出厂价),
max_digits=6,decimal_places=2
默认值=0)
价格=车型。DecimalField(售价),
max_digits=6,decimal_places=2
默认值=0)
pub=模特。ForeignKey(Publisher,on_delete=models。级联,空=真)
def __str__(self):
String=图书标题:%s% (self.title)
返回字符串
创建一个一对多对象来打开Django shell,并键入以下代码:
从书店导入模型
1=models . publisher . objects . create(name=中国人民大学出版社,tele= 62511329 ,书号=22000)
models . book . objects . create(title= statistics ,pub=pub1)
models . book . objects . create(title=多元统计分析,pub=pub1)
models . book . objects . create(title=回归分析,pub=pub1)
2=models . publisher . objects . create(name=高等教育出版社,tele= 82080802 ,书号=12000)
models . book . objects . create(title=数学分析,pub=pub2)
models . book . objects . create(title=高等代数,pub=pub2)
通过查询再检查一个:
#通过一本书找到相应的出版社
abok=models . book . objects . get(title= statistics )
print(abook.title,)的出版者是:,abook.pub.name)输出:
in[2]:abook=models . book . objects . get(title= statistics )
.print(abook . title 的出版商是:,abook.pub.name)
.
统计的出版社是:中国人民大学出版社,通过调查:
#通过出版社查询对应的书。
1=models . publisher . objects . get(name=中国人民大学出版社)
books=pub1.book_set.all()
#通过book_set获取pub1对应的多个Book对象
#相当于
#书籍=模型。Book.objects.filter(pub=pub1)
打印(清华大学出版社的书是:)
对于书中的书:
打印(book.title)输出:
在[3]: #通过出版社查对应的书。
.pub 1=models . publisher . objects . get(name=中国人民大学出版社)
.books=pub1.book_set.all()
.#通过book_set获取pub1对应的多个Book对象
.#相当于
.#书籍=模型。Book.objects.filter(pub=pub1)
.print(清华大学出版社的书有:)
.对于书中的书:
.打印(book.title)
.
清华大学的书有:
统计数字
多元统计分析
回归分析
我们来看看mywebdb数据库中的china_publisher数据表:
MySQL select * from China _ publisher;
- - - -
id 姓名书号电话
- - - -
1 中国人民大学出版社 22000 62511329
2 高等教育出版社 12000 82080802
- - - -
集合中的2行(0.00秒)
再次查看mywebdb数据库中的bookstore_book数据表:
MySQL select * from book store _ book;
- - - - -
id title ex fac price price pub _ id
- - - - -
1 Djangoweb开发实践 0.00 0.00 NULL
2 python 0.00 0.00 NULL
3 R 0.00 0.00 NULL
5 算法 0.00 0.00 NULL
6 集体智能编程 0.00 0.00 NULL
8 统计 0.00 0.00 1
9 多元统计分析 0.00 1.00 0.00
10 回归分析 0.00 0.00 1
11 数学分析 0.00 0.00 2
12 高等代数 0.00 0.00 2
- - - - -
set中的10行(0.01秒)book store _ book数据表的pub_id字段与china_publisher数据表中的id字段相关联,因此pub_id=1表示中国人民大学出版社,pub_id=2表示高等教育出版社。
最后我们启动了服务,向http://127 . 0 . 0 . 1:8000/admin/book/提出了请求
点击高等代数:
大家可以看到,在《高等代数》的记录中,pub默认是高等教育出版社,但是它有一个可选框,我们可以在中国人民大学出版社和高等教育出版社之间选择。
现在,我们把高等代数出版社改为中国人民大学出版社,点击保存。
现在,请查看我们的书店_图书数据表:
MySQL select * from book store _ book;
- - - - -
id title ex fac price price pub _ id
- - - - -
1 Djangoweb开发实践 0.00 0.00 NULL
2 python 0.00 0.00 NULL
3 R 0.00 0.00 NULL
5 算法 0.00 0.00 NULL
6 集体智能编程 0.00 0.00 NULL
8 统计 0.00 0.00 1
9 多元统计分析 0.00 1.00 0.00
10 回归分析 0.00 0.00 1
11 数学分析 0.00 0.00 2
12 高等代数 0.00 0.00 1
- - - - -
集合中的10行(0.00秒)非常好!记录已被更新!
转载请联系作者获得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。