您的位置:首页 > 编程语言 > Go语言

django model 多对多查询

2015-09-04 13:24 381 查看
看一下自己的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'组名')
application = models.CharField(max_length=20, 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             |
+----------------------------+
| app_group                  |
| app_hostlist               |
| app_hostlist_group         |

可以看多多出了一个app_hostlist_group的表:
mysql> select * from app_hostlist_group;
+----+-------------+----------+
| 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决定)
[01/Sep/2015 07:50:04] "GET /group/ HTTP/1.1" 200 24954
[<HostList: 192.168.63.114>, <HostList: 192.168.63.63>]


本文出自 “小罗” 博客,请务必保留此出处http://xiaoluoge.blog.51cto.com/9141967/1691303
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: