数据库表关联关系映射
⽂章⽬录
数据库表关联关系映射
⼀对⼀映射
定义model:⼀个⼈对应⼀个⾝份证
classUrProfile():
name=eld(max_length=16,verbo_name='⽤户名')
classMeta:
db_table='UrProfile'
verbo_name='⽤户'
verbo_name_plural=verbo_name
def__str__(lf):
return'%s'%()
classIDCard():
id_card=eld(max_length=18,verbo_name='⾝份证号')
ur=neField(UrProfile,unique=True,on_delete=E)
classMeta:
db_table='IDCard'
verbo_name='⾝份证号'
verbo_name_plural=verbo_name
def__str__(lf):
return'%s'%(_card)
新增数据
⽤户⾝份证号
张三
李四2222222222
王五33333333
赵六
names=['张三','李四','王五']
fornameinnames:
ur=UrProfile(name=name)
()
id_cards=['1111','222222222222222','333333333333333']
foriinrange(0,3):
#新增数据有两种⽅式
#⽅式⼀:字段名=对象
#⽅式⼆:字段名_id=对象id
idcard=IDCard(id_card=id_cards[i],ur_id=i+1)#⽅式⼆
()
查询数据
正向查询:直接通过关联属性查出(通过外键的查询⽆外键的)----通过⾃⾝对应的对象查
id1='1111'
ur=(id_card=id1).ur
print(ur)
反向查询:通过反向关联属性查询(⽆外键的查询有外键的)----通过关联的外键对象查⾃⾝
name='张三'
idcard=(name=name).idcard
print(idcard)
⼀对多映射
如⼀个书有⼀个作者,⼀个作者有多本书…
classAuthor():
name=eld(max_length=16,verbo_name='作者名')
classMeta:
db_table='Author'
verbo_name='作者'
verbo_name_plural=verbo_name
def__str__(lf):
return'%s'%()
classBook():
name=eld(max_length=16,verbo_name='书名')
author=nKey(Author,on_delete=E)
classMeta:
db_table='Book'
verbo_name='书名'
verbo_name_plural=verbo_name
def__str__(lf):
return'%s'%()
1.外键在⼀对多的多中设置
_delete=E表⽰级联删除
新增数据
作者书
鲁迅孔⼄⼰
闰⼟
李⽩将进酒
早发⽩帝城
蜀道难
author1=(name='鲁迅')
author2=(name='李⽩')
book1=(name='孔⼄⼰',author=author1)
book2=(name='闰⼟',author=author1)
book3=(name='将进酒',author=author2)
book4=(name='早发⽩帝城',author=author2)
book5=(name='蜀道难',author=author2)
正向查询:通过⾃⾝对应的对象查
通过⼀查多
author_name='鲁迅'
author=(name=author_name)
books=(author=author)
print(books)
通过多查⼀
name='蜀道难'
book=(name=name)
author=(book=book)
print(author)
反向查询:通过关联的外键对象查⾃⾝
通过⼀查多
name='李⽩'
author=(name=name)
books=_()
print(books)
在⼀对多情况下:反向查询通过⼀查多时,才有_t
通过多查⼀
name='将进酒'
book=(name=name)
author=
print(author)
多对多
⼀篇⽂章有多个出版社,⼀个出版社有多篇⽂章
classArticle():
name=eld(max_length=16,verbo_name='⽂章')
classMeta:
db_table='Article'
verbo_name='⽂章'
verbo_name_plural=verbo_name
def__str__(lf):
return'%s'%()
classPublication():
name=eld(max_length=16,verbo_name='出版社')
book=ManyField(Article)
classMeta:
db_table='Publication'
verbo_name='出版社'
verbo_name_plural=verbo_name
def__str__(lf):
return'%s'%()
新增数据
出版社⽂章
北京⼤学出版社语⽂⽂章
数学⽂章
英语⽂章
物理⽂章
化学⽂章
⽣物⽂章
清华⼤学出版社英语⽂章
物理⽂章
化学⽂章
#新增⽅式⼀:
#先创建两种对象
#再添加它们之间的关系
pub1=(name='北京⼤学出版社')
pub2=(name='清华⼤学出版社')
article1=(name='语⽂⽂章')
article2=(name='数学⽂章')
article3=(name='英语⽂章')
article4=(name='物理⽂章')
article5=(name='化学⽂章')
article6=(name='⽣物⽂章')
#正向添加
(article1)
(article2)
(article3)
(article4)
(article5)
(article6)
#反向添加
ation_(pub2)
ation_(pub2)
ation_(pub2)
#新增⽅式⼆:
#先创建⼀种对象
#再创建第⼆种对象的同时添加关系
pub1=(name='北京⼤学出版社')
pub2=(name='清华⼤学出版社')
article1=(name='语⽂⽂章')
article2=(name='数学⽂章')
article3=(name='英语⽂章')
article4=(name='物理⽂章')
article5=(name='化学⽂章')
article6=(name='⽣物⽂章')
ation_(pub2)
ation_(pub2)
ation_(pub2)
对应模型没有关联属性时,才有_t
查询数据
正向查询:通过⾃⾝对应的对象查
name='北京⼤学出版社'
publication=(name=name)
articles=(publication=publication)
print(articles)
name='英语⽂章'
article=(name=name)
publications=(article=article)
print(publications)
反向查询
name='北京⼤学出版社'
articles=(name=name).()
print(articles)
name='英语⽂章'
publications=(name=name).publication_()
print(publications)
⼀对多或者多对多情况下,要在admin后台显⽰'多'的属性:
classArticleManager(dmin):
def出版社(lf,obj):
return[ation_()]
list_display=['name','出版社']
classPublicationManager(dmin):
def⽂章(lf,obj):
return[()]
list_display=['name','⽂章']
本文发布于:2022-12-03 20:41:15,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/46589.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |