最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python Django ORM連表正反操作技巧

 更新時(shí)間:2021年06月13日 12:10:36   作者:磕伴  
這篇文章主要介紹了Django-ORM-連表正反操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

二、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()  #跨表查詢
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) 

#以前跨表需要寫上obj.小寫的表名_set.all 比如obj.boy_set.all(),用了**后就不用寫小寫的表名_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() 這種方法改名可以直接寫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)

&&&

思路:男女混合表,在同一張表自動(dòng)生成另外一張自己與自己相關(guān)聯(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()  #以左邊為條件去查,(一共有左(男生)右(女生)兩個(gè)選項(xiàng),從左查為正查,從右查為反查)

for i in girl_list:
       print(i.nickname)

#若是這個(gè)obj是屬于右邊選項(xiàng)的,想要反查左邊的,得用小寫表名_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)文章!

相關(guān)文章

  • Python中函數(shù)的參數(shù)傳遞與可變長(zhǎng)參數(shù)介紹

    Python中函數(shù)的參數(shù)傳遞與可變長(zhǎng)參數(shù)介紹

    這篇文章主要介紹了Python中函數(shù)的參數(shù)傳遞與可變長(zhǎng)參數(shù)介紹,本文分別給出多個(gè)代碼實(shí)例來(lái)講解多種多樣的函數(shù)參數(shù),需要的朋友可以參考下
    2015-06-06
  • Python將多個(gè)excel文件合并為一個(gè)文件

    Python將多個(gè)excel文件合并為一個(gè)文件

    這篇文章主要為大家詳細(xì)介紹了Python將多個(gè)excel文件合并為一個(gè)文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • python 解析html之BeautifulSoup

    python 解析html之BeautifulSoup

    項(xiàng)目里需要解析html,采用python語(yǔ)言實(shí)現(xiàn),發(fā)現(xiàn)了BeautifulSoup這個(gè)好用的東西,寫了一個(gè)程序,可能大家不知道,干什么用的,目的是讓大家知道如何使用 BeautifulSoup 當(dāng)然我這個(gè)是用都是很初級(jí)的,高級(jí)的使用,偶也沒(méi)有學(xué)會(huì)呢,太高深了
    2009-07-07
  • Python3多線程詳解

    Python3多線程詳解

    使用多線程,可以同時(shí)進(jìn)行多項(xiàng)任務(wù),可以使用戶界面更友好,還可以后臺(tái)執(zhí)行某些用時(shí)長(zhǎng)的任務(wù),同時(shí)具有易于通信的優(yōu)點(diǎn)。python3中多線程的實(shí)現(xiàn)使用了threading模塊,它允許同一進(jìn)程中運(yùn)行多個(gè)線程,本文介紹的非常詳細(xì),,需要的朋友可以參考下
    2023-05-05
  • Python的Django框架中settings文件的部署建議

    Python的Django框架中settings文件的部署建議

    這篇文章主要介紹了Python的Django框架中settings文件的部署建議,包括對(duì)local_settings的弊病的一些簡(jiǎn)單分析,需要的朋友可以參考下
    2015-05-05
  • Python隨機(jī)采樣及概率分布(二)

    Python隨機(jī)采樣及概率分布(二)

    之前的《Python中的隨機(jī)采樣和概率分布我們介紹了Python中最簡(jiǎn)單的隨機(jī)采樣函數(shù)。接下來(lái)我們更進(jìn)一步,來(lái)看看如何從一個(gè)概率分布中采樣,我們以幾個(gè)機(jī)器學(xué)習(xí)中最常用的概率分布為例。
    2022-01-01
  • python_matplotlib改變橫坐標(biāo)和縱坐標(biāo)上的刻度(ticks)方式

    python_matplotlib改變橫坐標(biāo)和縱坐標(biāo)上的刻度(ticks)方式

    這篇文章主要介紹了python_matplotlib改變橫坐標(biāo)和縱坐標(biāo)上的刻度(ticks)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • 基于Python編寫監(jiān)控視頻存儲(chǔ)計(jì)算器

    基于Python編寫監(jiān)控視頻存儲(chǔ)計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了如何基于Python編寫一個(gè)監(jiān)控視頻存儲(chǔ)計(jì)算器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • python 全局變量的import機(jī)制介紹

    python 全局變量的import機(jī)制介紹

    在之前學(xué)習(xí)python設(shè)計(jì)模式(工廠模式實(shí)踐篇),希望使用全局變量代替c++的宏完成服務(wù)自動(dòng)注冊(cè)功能時(shí),遇到過(guò)一個(gè)問(wèn)題,全局變量的定義和使用放在同一個(gè)可執(zhí)行腳本中的問(wèn)題
    2017-09-09
  • Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,無(wú)序鏈表詳解

    Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,無(wú)序鏈表詳解

    這篇文章主要為大家詳細(xì)介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03

最新評(píng)論

开远市| 迁安市| 金坛市| 山东| 西乡县| 宁阳县| 新干县| 曲靖市| 安远县| 吐鲁番市| 吉林省| 岑巩县| 攀枝花市| 淄博市| 成武县| 福清市| 连山| 镇沅| 宜都市| 永吉县| 阿巴嘎旗| 邯郸市| 教育| 健康| 兴城市| 虹口区| 磐安县| 兴义市| 色达县| 新绛县| 阜康市| 米脂县| 区。| 台安县| 津南区| 堆龙德庆县| 温泉县| 南投市| 黔江区| 高平市| 杭州市|