婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Python Django ORM連表正反操作技巧

Python Django ORM連表正反操作技巧

熱門(mén)標(biāo)簽:地圖標(biāo)注自己和別人標(biāo)注區(qū)別 商家地圖標(biāo)注海報(bào) 海外網(wǎng)吧地圖標(biāo)注注冊(cè) ai電銷(xiāo)機(jī)器人的優(yōu)勢(shì) 聊城語(yǔ)音外呼系統(tǒng) 南陽(yáng)打電話(huà)機(jī)器人 騰訊地圖標(biāo)注沒(méi)法顯示 孝感營(yíng)銷(xiāo)電話(huà)機(jī)器人效果怎么樣 打電話(huà)機(jī)器人營(yíng)銷(xiāo)

一、A表男生,B表女生,C表關(guān)系

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__跨表查詢(xún)
 for i in love_list:
     print(i.g.nick, love_list)    #這個(gè)是按照.類(lèi)里面的名字查詢(xún)

二、A表男生,B表女生,自動(dòng)創(chuàng)建C表ManyToManyField

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()  #跨表查詢(xún)
for i in a:
     print(i.name)

三、A表男女混合表,B表關(guān)系表

思路:男女信息(名字,性別等)都放在一個(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)的表再查詢(xún)
else:
    bb = obj.boys.all()
    for i in bb:
        print(i.b.nickname)

四、A表男女混合表(從一張表開(kāi)始)FK自關(guān)聯(lián)

思路:男女混合表,在同一張表自動(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)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 一篇文章帶你自學(xué)python Django
  • python之django路由和視圖案例教程
  • python Django框架快速入門(mén)教程(后臺(tái)管理)
  • Python django中如何使用restful框架
  • 利用Python Django實(shí)現(xiàn)簡(jiǎn)單博客系統(tǒng)
  • Python Django 后臺(tái)管理之后臺(tái)模型屬性詳解
  • python之Django自動(dòng)化資產(chǎn)掃描的實(shí)現(xiàn)
  • python Django的顯示個(gè)人信息詳解

標(biāo)簽:南寧 迪慶 六盤(pán)水 揚(yáng)州 牡丹江 撫州 聊城 楊凌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python Django ORM連表正反操作技巧》,本文關(guān)鍵詞  Python,Django,ORM,連表,正反,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python Django ORM連表正反操作技巧》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Python Django ORM連表正反操作技巧的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 巴楚县| 广安市| 麻城市| 景洪市| 洪洞县| 北京市| 普格县| 高邑县| 井冈山市| 江川县| 佛冈县| 读书| 芦山县| 卓尼县| 新化县| 叙永县| 靖州| 长泰县| 包头市| 巴林左旗| 深水埗区| 满城县| 益阳市| 磴口县| 富蕴县| 瑞丽市| 文山县| 威海市| 凤庆县| 金溪县| 闸北区| 响水县| 安西县| 浙江省| 桐乡市| 开远市| 德钦县| 黔江区| 东城区| 沙田区| 瑞安市|