django model 多對多查詢

2021-09-03 10:32:28 字數 1596 閱讀 4489

看一下自己的models檔案:

class hostlist(models.model):

ip = models.ipaddressfield(unique=true, verbose_name=u'ip位址')

hostname = models.charfield(max_length=30, verbose_name=u'主機名')

group = models.manytomanyfield('group', null=true, blank=true ,verbose_name=u'組名') 

bianhao = models.charfield(max_length=30, verbose_name=u'編號') 

idc_name = models.charfield(max_length=40,null=true,blank=true, verbose_name=u'所屬機房') 

def __unicode__(self):

return self.ip

class group(models.model):

name = models.charfield(max_length=50,unique=true)

def __unicode__(self):

return self.name

這兩個表組成多對多關係,自然而然就產生了第三個對應記錄id值的表:

mysql> show tables;

+----------------------------+

| tables_in_cmdb             |

+----------------------------+

+----+-------------+----------+

| id | hostlist_id | group_id |

+----+-------------+----------+

| 13 |          18 |        1 |

|  8 |          17 |        2 |

|  3 |          16 |        2 |

| 12 |          14 |        2 |

| 11 |          19 |        1 |

+----+-------------+----------+

映**id的對應關係;關於查詢的兩種方式:

第一:從前端返回的乙個組名,通過這個組查詢到hostlist表裡面的所有ip:

id = request.get.get('id')

group_name = group.objects.get(id=id)

all_ip = group_name.hostlist_set.all()

print all_ip

檢視後台**執行效果:(結果主要有hostlist的return self.ip決定)

雙向多對多

雙向多對多會通過乙個中間表來維持關聯關係 雙向多對多關係中必須指定乙個關係維護端 否則中間表裡會出現主鍵重複的問題 例如 標籤類tags和商品類goods 乙個標籤可對應多種商品 乙個商品也能有多個標籤 首先在兩個類中各建乙個對方型別的set作屬性 用到的註解解釋 商品類goods 需要用 join...

Django ORM 一對多 和 多對多

在 models.py 上定義 class province models.model name models.charfield max length 32 def str self return self.name class city models.model name models.char...

怎樣理解多對多

a表,a id,a name,a tel三個字段。b表,b id,b address,b sol三個字段。關聯表,ref id,a id,b id,儲存著ab兩表的id,比如 a有 a0001,zhang3,139555533 a0002,li4,1397788888 a0003,wang5,136...