校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > Python Django ORM連表正反操作技巧

Python Django ORM連表正反操作技巧

熱門標簽:地圖標注自己和別人標注區別 商家地圖標注海報 海外網吧地圖標注注冊 ai電銷機器人的優勢 聊城語音外呼系統 南陽打電話機器人 騰訊地圖標注沒法顯示 孝感營銷電話機器人效果怎么樣 打電話機器人營銷

一、A表男生,B表女生,C表關系

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表女生,自動創建C表ManyToManyField

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

通過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表關系表

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

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

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

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

四、A表男女混合表(從一張表開始)FK自關聯

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

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-連表正反操作的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • 一篇文章帶你自學python Django
  • python之django路由和視圖案例教程
  • python Django框架快速入門教程(后臺管理)
  • Python django中如何使用restful框架
  • 利用Python Django實現簡單博客系統
  • Python Django 后臺管理之后臺模型屬性詳解
  • python之Django自動化資產掃描的實現
  • python Django的顯示個人信息詳解

標簽:南寧 迪慶 六盤水 揚州 牡丹江 撫州 聊城 楊凌

巨人網絡通訊聲明:本文標題《Python Django ORM連表正反操作技巧》,本文關鍵詞  Python,Django,ORM,連表,正反,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python Django ORM連表正反操作技巧》相關的同類信息!
  • 本頁收集關于Python Django ORM連表正反操作技巧的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 武威市| 兰西县| 镇平县| 城口县| 福安市| 商城县| 南开区| 周至县| 紫阳县| 南郑县| 砀山县| 永德县| 荃湾区| 天祝| 嘉善县| 化德县| 和静县| 怀柔区| 张家界市| 溧阳市| 年辖:市辖区| 高尔夫| 宁乡县| 时尚| 钦州市| 县级市| 拉孜县| 沈丘县| 铜川市| 大城县| 宝应县| 成武县| 博白县| 永嘉县| 三江| 克什克腾旗| 磐安县| 岑巩县| 搜索| 清涧县| 巨鹿县|