av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python Django ORM連表正反操作技巧

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

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

1通過(guò)A表查與某個(gè)男生有關(guān)系的所有女生

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

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

思想2:通過(guò)C表跨到A表找到對(duì)應(yīng)男生,然后再跨到B表找到女生

love_list=models.Love.objects.filter(b__name=’陳亮’) #這個(gè)是b__跨表查詢 for i in love_list: print(i.g.nick, love_list) #這個(gè)是按照.類(lèi)里面的名字查詢二、A表男生,B表女生,自動(dòng)創(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’) # 讓其自動(dòng)創(chuàng)建一個(gè)表

通過(guò)boy表查對(duì)應(yīng)的girl

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

通過(guò)girl反查對(duì)應(yīng)的男孩

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

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

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

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

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

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

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

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

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

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

從男女混合表中查到具體人對(duì)應(yīng)所有的有關(guān)系的異性

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

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

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

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() #以左邊為條件去查,(一共有左(男生)右(女生)兩個(gè)選項(xiàng),從左查為正查,從右查為反查)for i in girl_list: print(i.nickname)#若是這個(gè)obj是屬于右邊選項(xiàng)的,想要反查左邊的,得用小寫(xiě)表名_set來(lái)進(jìn)行反查比如:obj. boy_and_girl_set.all() 或者obj.boy.all()

ps:

Django model中的class Meta詳解

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

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 国产精品乱码一区二区视频 | 夜夜草视频 | 国产精品久久久久久久久久久久午夜片 | 毛片aaa | 日本少妇一区二区 | 一区二区精品在线 | 黄色av免费在线观看 | 久久精品视频国产 | 国产精品久久久久久久成人午夜 | 色综合激情 | 国产精品欧美在线 | 成人免费视频网址 | 国产视频成人 | 免费黄色小视频 | 在线观看的av网站 | 91精品久久久久久粉嫩 | 欧美一级黄 | 欧美网站在线观看 | 久久依人| 国产成人午夜精品 | 久久九九免费视频 | 久草资源网 | 亚洲激情网 | 国产成人一区 | 一区二区在线视频 | 黄色福利视频 | 欧美日韩国产在线播放 | 日韩视频免费在线观看 | 一级黄色免费 | 中文字幕av在线 | 国产精品入口夜色视频大尺度 | 毛片一区 | av狠狠干 | 欧美黄色一级视频 | 九九热精品在线 | 国产一级片网站 | 日本成人小视频 | 一区二区三区成人 | 亚洲91av| 91视频日本 | 天天躁日日躁狠狠躁伊人 |