Django中多对多查询方式
来源:互联网 发布:用ipad怎么开淘宝网店 编辑:程序博客网 时间:2024/05/29 09:42
使用版本python3.5+django1.11.4
创建django-admin startproject DjangoORM
创建App ./manage.py startapp ORM
from django.db import modelsclass Goods(models.Model):#商品 g_name = models.CharField(max_length=20) g_price = models.DecimalField(max_digits=5, decimal_places=2) gc = models.ForeignKey("Category", null=True, on_delete=models.SET_NULL)#gc为外键,类别表为母表class Category(models.Model):#类别 c_name = models.CharField(max_length=20)class Store(models.Model):#商家 s_name = models.CharField(max_length=30) s_detail = models.TextField(blank=True, null=True) sc = models.ManyToManyField("Category")#与类别表进行多对多关联
多对多增删改查同时也适用一对多,一对一,修改少量参数即可
1.增添加商家Store.objects.create(s_name="商家A", s_detail="物美价廉,抄底折扣。。。。")Out[2]: <Store: Store object>Store(s_name="商家B", s_detail="大促销").save()添加类别Category.objects.create(c_name="电脑整机")<Category: Category object>Category(c_name="文具耗材").save()增与改(增添子表或母表数据参照一对一的增,多对多重点在于关系表的对应关系变更)创建商家C添加全部分类Store.objects.create(s_name="商家C").sc.add(*(Category.objects.all()))#如果商户已存在则把create改成getstore = Store.objects.get(s_name="商家C")store.sc=(Category.objects.all())store.save()创建商家D添加指定分类store = Store.objects.create(s_name="商家D")category = Category.objects.filter(c_name__in=["电脑整机","文具耗材"])#单个改成get,全部改成allstore.sc.add(*category)#add是追加模式store.sc.clear()#清空此商家的商品#让指定商品分类添加指定的商家,反向查询store = Store.objects.create(s_name="商家E")category = Category.objects.get(c_name="电脑整机")category.store_set.add(store)效果与上面一样让所有商家都添加这个分类stores = Store.objects.all()category = Category.objects.get(c_name="电脑整机")category.store_set.add(*stores)category.store_set.clear()#让所有商家去除这个分类category.store_set.all().delete()#是删除store_set的所有商家#只有子表才有"子表名小写_set"的写法,得到的是一个QuerySet集合,后边可以接.add(),.remove(),.update(),.delete(),.clear()
2.查
(Store.objects.get(s_name="商家C")).sc.all()<QuerySet [<Category: Category object>, <Category: Category object>]>Category.objects.filter(store__s_name="商家C")<QuerySet [<Category: Category object>, <Category: Category object>]>#查找指定商家下面的所有分类Store.objects.get(s_name="商家C").sc.all()#写法:子表对象.子表多对多字段.过滤条件(all()/filter())<QuerySet [<Category: Category object>, <Category: Category object>]>反向查询Category.objects.filter(store__s_name="商家C")Out[25]: <QuerySet [<Category: Category object>, <Category: Category object>]>#母表对象.filter(子表表名小写__子表字段名="过滤条件")从分类查询,查看那些商家里面发布指定的某一个分类(Category.objects.get(c_name="电脑整机")).store_set.all()<QuerySet [<Store: Store object>, <Store: Store object>]>Store.objects.filter(sc=Category.objects.get(c_name="电脑整机"))<QuerySet [<Store: Store object>, <Store: Store object>]>Store.objects.filter(sc__c_name="电脑整机")#filter(子表外键字段__母表字段='过滤条件')<QuerySet [<Store: Store object>, <Store: Store object>]>Store.objects.filter(sc=category)##filter得到QuerySet,写法:filter(子表外键字段=母表主键对象),此处和一对多略有不同,是子表外键字段而不是外键字段_母表主键<QuerySet [<Store: Store object>, <Store: Store object>]>
3.删
让指定商家清空分类s = Store.objects.get(s_name="商家C")c = Category.objects.all()s.sc = ""s.save()s=Store.objects.get(s_name="商家C")c = Category.objects.all()s.sc.remove(*c)s = Store.objects.get(s_name="商家C")s.sc.clear()删除母表与子表关联关系让所有商家去掉指定分类s = Store.objects.all()c = Category.objects.get(c_name="电脑整机")c.store_set.remove(*s)c = Category.objects.get(c_name="电脑整机")c.store_set.clear()#删除商家子表数据删除所有指定分类的全部商家c=Category.objects.get(c_name="电脑整机")c.store_set.all().delete()删除所有商家Store.objects.all().delete()
阅读全文
0 0
- Django中多对多查询方式
- Django models中多对多字段的反查询
- django学习——Model模型中多对多外键如何查询
- django进阶10 一对多 多对多查询
- 多对多数据库创建方式Django
- django中数据库一对一,一对多,多对多关系
- Django中多对多表的创建
- django shell 方式数据查询
- django框架多条件查询
- django 多对多存储
- Django多对多关系
- django之多对多关系
- hibernate中多对一映射查询
- Django-ORM多对多查询 (自定义第三张表&ManyToManyField)
- Django--复用django自带的多对多控件
- django一对多查询错误处理
- django一对多查询错误处理
- Django-model一对多关系查询
- python 中的trick(二)
- 安装keepalived出错./configure: error: Popt libraries is required
- 数据库基础篇
- jmeter其他特性---工作台
- 文件流---获取文件的大小(图片、视频、文件......)
- Django中多对多查询方式
- python绑定方法
- 脚本
- flume将指定目录下文件解析后入到Hbase(开启kerberos)
- c++中stl的使用
- 散热器热阻优化(二)
- [日推荐]『爱情保鲜计』来呀,虐狗呀!
- 浅谈eclipse生成的.classpath文件
- MySQL中添加唯一约束和联合唯一约束