Python之Django--ORM连表操作
2016-04-21 22:29
633 查看
一对多
增:
1.外键id添加
2.直接添加外键的对象
查:
正向查询:根据userinfo查usertype
反向查询:根据usertype查userinfo
多对多
增:
正向增:
反向增:
区别总结:区别在于正向查拥有自己创建好的host句柄,可以直接使用add方法添加,而反向查没有,所以要使用django为我们提供的set句柄。
#正向增加
#反向添加
查:
自定义多对多表操作
class UserType(models.Model): caption = models.CharField(max_length=32) class UserInfo(models.Model): user_type = models.ForeignKey(UserType)# user_type对象中封装id,caption username = models.CharField(max_length=32) age = models.IntegerField()
增:
1.外键id添加
models.UserInfo.objects.create(username='xs',age=19,user_type_id=1)
2.直接添加外键的对象
obj = models.UserType(caption='haha') obj.save() models.UserInfo.objects.create(username='xs',age=18,user_type=obj)
查:
正向查询:根据userinfo查usertype
result = models.UserInfo.objects.filter(user_type__caption='CTO') for item in result: print item.username,item.age,item.user_type.caption
反向查询:根据usertype查userinfo
result = models.UserType.objects.get(id=1) print '-->0',result print '-->1',result.userinfo_set print '-->2',result.userinfo_set.all() print '-->3',result.userinfo_set.filter(username='xs') #用字段条件查询 print '-->4',models.UserInfo.objects.filter(user_type=result) #用对象条件查询 user_type_obj = models.UserType.objects.get(userinfo__username='xs') print '-->0',user_type_obj.caption print '-->1',user_type_obj.userinfo_set.all().count() return HttpResponse('ok')
多对多
class Host(models.Model): hostname = models.CharField(max_length=32) port = models.IntegerField() class HostAdmin(models.Model): username = models.CharField(max_length=32) email = models.CharField(max_length=32) host = models.ManyToManyField(Host)
增:
正向增:
admin_obj = models.HostAdmin.objects.get(username='xs') host_list = models.Host.objects.filter(id__lt=3) admin_obj.host.add(*host_list)
反向增:
host_obj = models.Host.objects.get(id=3) admin_list= models.HostAdmin.objects.filter(id__gt=1) host_obj.hostadmin_set.add(*admin_list)
区别总结:区别在于正向查拥有自己创建好的host句柄,可以直接使用add方法添加,而反向查没有,所以要使用django为我们提供的set句柄。
#正向增加
admin_obj = models.HostAdmin.objects.get(username='xs') host_list = models.Host.objects.filter(id__lt=3) admin_obj.host.add(*host_list)
#反向添加
host_obj = model.Host.objects.get(id=3) admin_list = models.HostAdmin.objects.filter(id__gt=1) host_obj.hostadmin_set.add(*admin_list)
查:
#正向查 admin_obj = models.HostAdmin.objects.get(username='xs') print admin_obj.host.all() #反向查 host_obj = models.Host.objects.get(id=3) print host_obj.hostadmin_set.all()
#增 #models.HostRelation.objects.create(host_id=1,admin_id=1) #查 relationList = models.HostRelation.objects.all() for item in relationList: print item.host.hostname print item.admin.username
自定义多对多表操作
相关文章推荐
- python 多维数组的初始化生成
- Python排序算法之冒泡排序
- Python IO编程——学习笔记
- python中OS模块获得文件路径的流程
- python 内置函数
- python 统计词频
- Python错误、调试和测试——学习笔记
- Python之前端
- python numpy使用
- Python面向对象高级编程——学习笔记
- IPython和Jupyter Notebook 简介
- Python之线程池
- python中 pip install scrapy
- Python之Web框架们
- Python面向对象编程——学习笔记
- Python多线程join的用法
- 《用 Python 学微积分》笔记 1
- Python模块——学习笔记
- Python函数式编程——学习笔记
- Python多线程互斥锁