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

Django ORM多對多查詢方法(自定義第三張表&ManyToManyField)

 更新時間:2019年08月09日 10:09:22   作者:Mcdull93  
今天小編就為大家分享一篇Django ORM多對多查詢方法(自定義第三張表&ManyToManyField),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

對于多對多表

- 1.自定義第三張表,更加靈活

- 2.ManyToManyField 自動生成第3張表 只能 有3列數(shù)據(jù) 不能自己添加。

自定義第三張表

# models.py

class Boy(models.Model):
  name = models.CharField(max_length=32)

class Girl(models.Model):
  name = models.CharField(max_length=32)


class Love(models.Model):
  b = models.ForeignKey('Boy')
  g = models.ForeignKey('Girl')

  # 創(chuàng)建聯(lián)合唯一索引
  # class Meta:
  #   unique_together = [
  #     ('b','g'),
  #   ]




# views.py

def test(request):
  # objs = [
  #   models.Boy(name='summer'),
  #   models.Boy(name='spring'),
  #   models.Boy(name='autumn'),
  # ]
  # models.Boy.objects.bulk_create(objs,5)

  # objs = [
  #   models.Girl(name='小于'),
  #   models.Girl(name='小秋'),
  #   models.Girl(name='小夏'),
  # ]
  # models.Girl.objects.bulk_create(objs,5)

# 查詢和girl小于有關(guān)系的boy

# 1 通過girl表進(jìn)行反向查找
  obj = models.Girl.objects.filter(name='小于').first().love_set.all()
  # obj = models.Girl.objects.filter(name='小于').first().love_set.select_related('b').all()
  for i in obj:
    print(i.b.name)




  print(' '.center(60,'='))



# 2 通過Love表進(jìn)行查找

  obj = models.Love.objects.filter(g__name='小于').all()
  for i in obj:
    print(i.b.name)

  # 這樣進(jìn)行查詢性能不好,需要重新發(fā)sql請求在進(jìn)行查詢另外一張表中的數(shù)據(jù)

  boy_list = models.Love.objects.filter(g__name='小于').values('b__name')
  for i in boy_list:
    print(i['b__name'])

  # 這樣 進(jìn)行了 優(yōu)化 不會重復(fù)發(fā)送sql請求,查詢到的結(jié)果內(nèi)是字典

  boy_obj = models.Love.objects.filter(g__name='小于').select_related('b').all()
  for i in boy_obj:
    print(i.b.name)
  # select_related('ut') 相當(dāng) 于 inner join 先連成一張表再進(jìn)行查詢

  return HttpResponse('insert ok ....')


ManyToManyField

# models.py
from django.db import models

class Boy(models.Model):
  name = models.CharField(max_length=32)
  # m = models.ManyToManyField('Girl')

class Girl(models.Model):
  name = models.CharField(max_length=32)
  m = models.ManyToManyField('Boy')

# views.py

def test(request):
  # objs = [
  #   models.Boy(name='summer'),
  #   models.Boy(name='spring'),
  #   models.Boy(name='autumn'),
  # ]
  # models.Boy.objects.bulk_create(objs,5)

  # objs = [
  #   models.Girl(name='小于'),
  #   models.Girl(name='小秋'),
  #   models.Girl(name='小夏'),
  # ]
  # models.Girl.objects.bulk_create(objs,5)


  # ManyToManyField

  obj = models.Girl.objects.filter(name='小秋').first()

  # 增
  # obj.m.add(3)
  # obj.m.add(3,4)
  # obj.m.add(*[1,2])

  # 刪
  # obj.m.remove(3)
  # obj.m.remove(3,4)
  # obj.m.remove(*[1,2])

  # 改
  # obj.m.set([1,2,])

  # boy_obj = obj.m.all()
  # for row in boy_obj:
  #   print(row.id,row.name)
  # 清除
  # obj.m.clear()


  # 反向查 在沒有 ManyToManyField 字段的表中查
  obj = models.Boy.objects.filter(name='summer').first()
  girl_obj = obj.girl_set.all()
  # 增刪改查
  obj.girl_set.set([1,2,3])

  for row in girl_list:
    print(row.id,row.name)

  return HttpResponse('ok')

雜交(自定義第三張表+ManyToManyField)

# modles.py
class Boy(models.Model):
  name = models.CharField(max_length=32)

class Girl(models.Model):
  name = models.CharField(max_length=32)
  m = models.ManyToManyField('Boy',through='Love',through_fields=('b','g')) # 只讓其生成3張表,如果不加后面產(chǎn)生生成4張表

class Love(models.Model):
  b = models.ForeignKey('Boy')
  g = models.ForeignKey('Girl')

# views.py
def test(request):
  obj = models.Girl.objects.filter(name='小于').first()
  # obj.m.add(1) # 不行
  # obj.m.remove(1) # 不行
  # obj.m.set([1,2]) # 不行
  # obj.m.clear() # 可以
  # obj.m.all() # 可以

  # 雜交的方法對獲取查詢方便點(diǎn),還添加了清空功能

  boy_obj = obj.m.all()

  for i in boy_obj:
    print(i.name)

以上這篇Django ORM多對多查詢方法(自定義第三張表&ManyToManyField)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python3.7.0 Shell添加清屏快捷鍵的實(shí)現(xiàn)示例

    Python3.7.0 Shell添加清屏快捷鍵的實(shí)現(xiàn)示例

    這篇文章主要介紹了Python3.7.0 Shell添加清屏快捷鍵的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python中Matplotlib的簡單使用

    Python中Matplotlib的簡單使用

    這篇文章主要介紹了Python中Matplotlib的簡單使用,Matplotlib是一個用于繪制數(shù)據(jù)可視化圖形的Python庫,支持繪制各種靜態(tài),動態(tài),交互式的圖表,它是數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)領(lǐng)域最流行的可視化庫之一,需要的朋友可以參考下
    2023-07-07
  • 在VSCode中添加Python解釋器并安裝Python庫的方法

    在VSCode中添加Python解釋器并安裝Python庫的方法

    這篇文章主要介紹了在VSCode中添加Python解釋器并安裝Python庫的方法,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Python教程教你如何去除背景

    Python教程教你如何去除背景

    這篇文章主要介紹了Python教程教你如何去除背景,修飾圖片中的頭發(fā)是設(shè)計師最煩人的任務(wù)之一,下面文章將讓大家學(xué)會怎么輕松摳圖去背景,需要的小伙伴可以參考一下
    2022-02-02
  • 使用原生Python編寫Hadoop?MapReduce程序

    使用原生Python編寫Hadoop?MapReduce程序

    在大數(shù)據(jù)處理領(lǐng)域,Hadoop?MapReduce是一個廣泛使用的框架,用于處理和生成大規(guī)模數(shù)據(jù)集,本文將使用原生Python編寫Hadoop?MapReduce程序,需要的可以參考下
    2025-02-02
  • 書單|人生苦短,你還不用python!

    書單|人生苦短,你還不用python!

    Python 誕生之初就被譽(yù)為最容易上手的編程語言。進(jìn)入火熱的 AI 人工智能時代后,它也逐漸取代 Java,成為編程界的頭牌語言。下面這篇文章主要給大家總結(jié)介紹了一些關(guān)于python的書單,需要的朋友可以參考下。
    2017-12-12
  • PyTorch的nn.Module類的定義和使用介紹

    PyTorch的nn.Module類的定義和使用介紹

    在PyTorch中,nn.Module類是構(gòu)建神經(jīng)網(wǎng)絡(luò)模型的基礎(chǔ)類,所有自定義的層、模塊或整個神經(jīng)網(wǎng)絡(luò)架構(gòu)都需要繼承自這個類,本文介紹PyTorch的nn.Module類的定義和使用介紹,感興趣的朋友一起看看吧
    2024-01-01
  • Python中的單下劃線和雙下劃線使用場景詳解

    Python中的單下劃線和雙下劃線使用場景詳解

    這篇文章主要介紹了Python中的單下劃線和雙下劃線使用場景詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 一文深入了解Python中的繼承知識點(diǎn)

    一文深入了解Python中的繼承知識點(diǎn)

    Python?是面向?qū)ο蟮木幊陶Z言,因此支持面向?qū)ο蟮娜筇匦灾唬豪^承。本文就帶大家了解了解Python中繼承的相關(guān)知識點(diǎn),感興趣的可以了解一下
    2022-11-11
  • Python+wxPython實(shí)現(xiàn)將圖片轉(zhuǎn)換為草圖

    Python+wxPython實(shí)現(xiàn)將圖片轉(zhuǎn)換為草圖

    將照片轉(zhuǎn)換為藝術(shù)風(fēng)格的草圖是一種有趣的方式,可以為您的圖像添加獨(dú)特的效果,本文主要介紹了如何Python和wxPython來實(shí)現(xiàn)這一目標(biāo),需要的可以參考下
    2023-08-08

最新評論

南部县| 甘孜| 西乌| 平陆县| 施秉县| 永州市| 福安市| 漳平市| 白玉县| 朝阳区| 微山县| 江北区| 舒城县| 柳林县| 合山市| 措美县| 莱芜市| 东至县| 梅河口市| 通城县| 和顺县| 玉溪市| 太仆寺旗| 丰原市| 偏关县| 洛隆县| 友谊县| 景德镇市| 定兴县| 蒙自县| 资兴市| 宾阳县| 遂昌县| 永泰县| 松滋市| 慈利县| 元阳县| 衡南县| 田阳县| 秦安县| 浮梁县|