欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python Django ORM連表正反操作技巧

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

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

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

思想1:在A表中確認(rèn)男生后,通過反查到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:  #每個i是一個Love的對象,里面有一個id有一個nick
    print(i.g.nick)      #g是models里面class里面的屬性

思想2:通過C表跨到A表找到對應(yīng)男生,然后再跨到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

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

通過boy表查對應(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()   #直接通過.m就查到女孩相關(guān)所有
#girl_list = obj.m.filter(二次篩選)
   for i in girl_list:
       print(i.id,i.nick)

通過girl反查對應(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)系表

&&&

思路:男女信息(名字,性別等)都放在一個表,另外一個表(兩個屬性)放一個男生的外鍵(記錄男生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 關(guān)聯(lián)的是哪個ForeignKey
#obj對象男.girl_set.all() 把這個名字換成related_query_name的名字
#obj對象女.boy_set.all() #默認(rèn)表明+_set

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

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

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

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

&&&

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

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-連表正反操作的詳細(xì)內(nèi)容,更多關(guān)于Django-ORM-連表正反操作的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python全角與半角之間相互轉(zhuǎn)換的方法總結(jié)

    Python全角與半角之間相互轉(zhuǎn)換的方法總結(jié)

    全角與半角轉(zhuǎn)換在處理漢語語料中會經(jīng)常出現(xiàn),這里分別說明漢字、數(shù)字、字母的unicode編碼范圍,下面這篇文章主要給大家介紹了關(guān)于Python全角與半角之間相互轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • python使用pandas處理excel文件轉(zhuǎn)為csv文件的方法示例

    python使用pandas處理excel文件轉(zhuǎn)為csv文件的方法示例

    這篇文章主要介紹了python使用pandas處理excel文件轉(zhuǎn)為csv文件的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python中import reload __import__的區(qū)別詳解

    python中import reload __import__的區(qū)別詳解

    這篇文章主要介紹了python中import reload __import__的區(qū)別詳解,需要的朋友可以參考下
    2017-10-10
  • Python?Pygame繪制直線實現(xiàn)光線反射效果

    Python?Pygame繪制直線實現(xiàn)光線反射效果

    這篇文章主要為大家詳細(xì)介紹了如何利用Python?Pygame繪制直線以實現(xiàn)光線反射效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • Python2.7下安裝Scrapy框架步驟教程

    Python2.7下安裝Scrapy框架步驟教程

    本篇文章主要介紹了Python2.7下安裝Scrapy框架步驟教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Python?EasyDict庫以屬性方式訪問字典元素(無需使用方括號和鍵)

    Python?EasyDict庫以屬性方式訪問字典元素(無需使用方括號和鍵)

    在Python中,字典(dict)是一種常用的數(shù)據(jù)結(jié)構(gòu),用于存儲鍵值對,然而,有時候我們希望以屬性的方式訪問字典中的元素,而無需使用方括號和鍵,這就是EasyDict庫的用武之地,本文將深入介紹EasyDict庫,展示其強大的功能和如何通過示例代碼更好地利用它
    2023-12-12
  • scrapy爬蟲:scrapy.FormRequest中formdata參數(shù)詳解

    scrapy爬蟲:scrapy.FormRequest中formdata參數(shù)詳解

    這篇文章主要介紹了scrapy爬蟲:scrapy.FormRequest中formdata參數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python用dilb提取照片上人臉的示例

    Python用dilb提取照片上人臉的示例

    這篇文章主要介紹了Python用dilb提取照片上人臉的示例,幫助大家更好的利用python處理人像,感興趣的朋友可以了解下
    2020-10-10
  • 使用django-guardian實現(xiàn)django-admin的行級權(quán)限控制的方法

    使用django-guardian實現(xiàn)django-admin的行級權(quán)限控制的方法

    這篇文章主要介紹了使用django-guardian實現(xiàn)django-admin的行級權(quán)限控制的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • python文件操作整理匯總

    python文件操作整理匯總

    本文主要記錄了個人在項目中遇到的一些Python中對于文件、文件夾的操作需要涉及到的函數(shù)等內(nèi)容,非常的詳盡,有需要的可以參考下
    2014-10-10

最新評論