国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Python Django ORM連表正反操作技巧

瀏覽:2日期:2022-07-28 14:42:56
一、A表男生,B表女生,C表關系

Python Django ORM連表正反操作技巧Python Django ORM連表正反操作技巧Python Django ORM連表正反操作技巧Python Django ORM連表正反操作技巧

1通過A表查與某個男生有關系的所有女生

思想1:在A表中確認男生后,通過反查到C表,獲取相關內容(QuerySet),然后再跨到B表獲取所有女生信息。

obj=models.Boy.objects.filter(name=’陳亮’).first()love_list=obj.love_set.all() #love_set.all()反查相關所有(跨表)for i in love_list: #每個i是一個Love的對象,里面有一個id有一個nick print(i.g.nick) #g是models里面class里面的屬性

思想2:通過C表跨到A表找到對應男生,然后再跨到B表找到女生

love_list=models.Love.objects.filter(b__name=’陳亮’) #這個是b__跨表查詢 for i in love_list: print(i.g.nick, love_list) #這個是按照.類里面的名字查詢二、A表男生,B表女生,自動創(chuàng)建C表ManyToManyField

Python Django ORM連表正反操作技巧Python Django ORM連表正反操作技巧Python Django ORM連表正反操作技巧Python Django ORM連表正反操作技巧

class Boy(models.Model): name = models.CharField(max_length=32) m=models.ManyToManyField(’Girl’) # 讓其自動創(chuàng)建一個表

通過boy表查對應的girl

obj=models.Boy.objects.filter(name=’陳亮’).first()# obj.m.add(2,3) #添加新關系# obj.m.clear() #把跟name=’陳亮‘有關的全部刪除 girl_list=obj.m.all() #直接通過.m就查到女孩相關所有#girl_list = obj.m.filter(二次篩選) for i in girl_list: print(i.id,i.nick)

通過girl反查對應的男孩

oss = models.Girl.objects.filter(nick=’小貓’).first()a=oss.boy_set.all() #跨表查詢for i in a: print(i.name)三、A表男女混合表,B表關系表

Python Django ORM連表正反操作技巧&&&Python Django ORM連表正反操作技巧

Python Django ORM連表正反操作技巧Python Django ORM連表正反操作技巧

思路:男女信息(名字,性別等)都放在一個表,另外一個表(兩個屬性)放一個男生的外鍵(記錄男生id)放一個女生的外鍵(記錄女生的id)

問題:反查的時候需要兩個外鍵不知所措(之前的都是一個外鍵)

解決方法:related_query_name或者related_name(更簡單)

g=models.ForeignKey(’Boy_and_girl’,related_name=’boys’,on_delete=models.CASCADE,null=True)

#以前跨表需要寫上obj.小寫的表名_set.all 比如obj.boy_set.all(),用了**后就不用寫小寫的表名_set了

#related_query_name 關聯(lián)的是哪個ForeignKey#obj對象男.girl_set.all() 把這個名字換成related_query_name的名字#obj對象女.boy_set.all() #默認表明+_set

#related_name 更簡單#obj對象男.girl.all() 這種方法改名可以直接寫b.all()獲取有關聯(lián)的所有女性表#obj對象女.boy.all()

從男女混合表中查到具體人對應所有的有關系的異性

obj=models.Boy_and_girl.objects.filter(id=3).first() #對象if obj.gender==1: bb=obj.girls.all() #根據(jù)對象反向查找到跟對象有關的所有信息(在另外一張表上) for i in bb:print(i.g.nickname) #再帶著相關信息(女孩)回到原來的表再查詢else: bb = obj.boys.all() for i in bb:print(i.b.nickname)四、A表男女混合表(從一張表開始)FK自關聯(lián)

Python Django ORM連表正反操作技巧&&&Python Django ORM連表正反操作技巧

思路:男女混合表,在同一張表自動生成另外一張自己與自己相關聯(lián)的表(類似于二)

class Boy_and_girl (models.Model): name = models.CharField(max_length=32) m=models.ManyToManyField(’ Boy_and_girl ’,related_name=’boy’)obj=models.Boy. Boy_and_girl.filter(id=1).first() #找的id=1是男生girl_list=obj.m.all() #以左邊為條件去查,(一共有左(男生)右(女生)兩個選項,從左查為正查,從右查為反查)for i in girl_list: print(i.nickname)#若是這個obj是屬于右邊選項的,想要反查左邊的,得用小寫表名_set來進行反查比如:obj. boy_and_girl_set.all() 或者obj.boy.all()

ps:

Django model中的class Meta詳解

以上就是Django-ORM-連表正反操作的詳細內容,更多關于Django-ORM-連表正反操作的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: aaaaaaa一级毛片 | 日韩国产欧美一区二区三区在线 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲国产成人精彩精品 | 97se狠狠狠狠狠亚洲综合网 | 国产免费成人在线视频 | 久久只有这才是精品99 | 日本亚州在线播放精品 | 免费观看成为人视频 | 日韩午夜视频在线观看 | 久久爱com| 国产中文字幕视频在线观看 | 女人张开腿男人捅 | 99在线视频精品费观看视 | 我要看a级毛片 | 国产精品免费大片 | 亚洲日本高清成人aⅴ片 | 国产日韩欧美视频 | 九九视频高清视频免费观看 | 久久久久琪琪精品色 | 欧美美女一区二区三区 | av成人天堂 | 18视频在线观看 | 久草网在线视频 | 久久国内精品自在自线400部o | 久久综合香蕉久久久久久久 | 国产亚洲人成在线影院 | 在线观看国产精成人品 | 久草com| 一级做a爰全过程免费视频毛片 | 欧美成年黄网站色视频 | 日韩中文字 | 国产日韩欧美自拍 | 97青青草原国产免费观看 | 国产高清免费 | 天堂精品高清1区2区3区 | 久久久久久青草大香综合精品 | 日本黄色大片在线播放视频免费观看 | 欧美中文字幕一区二区三区 | 一级毛片在线不卡直接观看 | 亚洲九九色|