前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django实战-多对多查询

Django实战-多对多查询

作者头像
小团子
发布于 2019-10-15 02:20:29
发布于 2019-10-15 02:20:29
3.1K00
代码可运行
举报
文章被收录于专栏:数据云团数据云团
运行总次数:0
代码可运行

Django实战-ORM 数据库配置

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

举例:现有两张表,Store表和Category表。Store表中的字段有商家名称,商家详情信息等信息。而Category表中有商品类别信息。可以知道一个商家可以有多个商品类别,一个类别中也可以包含多个商品,所以这两张表的关系就是多对多的关系。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import models
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Goods(models.Model):#商品
    name = models.CharField(max_length=20)
    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):#类别
    name = models.CharField(max_length=20)

class Store(models.Model):#商家
    name = models.CharField(max_length=30)
    detail = models.TextField(blank=True, null=True)
    sc = models.ManyToManyField("Category")#与类别表进行多对多关联

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加商家
Store.objects.create(name="商家A", detail="物美价廉,限时抄底折扣")
Out[2]: <Store: Store object>

Store(name="商家B", detail="大促销").save()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 添加类别
Category.objects.create(name="电脑整机")
<Category: Category object>

Category(name="文具").save()

多对多重点在于关系表的对应关系变更

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建商家C添加全部分类
Store.objects.create(name="商家C").sc.add(*(Category.objects.all()))#如果商户已存在则把create改成get

store = Store.objects.get(name="商家C")
store.sc=(Category.objects.all())
store.save()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建商家D添加指定分类
store = Store.objects.create(name="商家D")
category = Category.objects.filter(name__in=["电脑整机","文具"])#单个改成get,全部改成all
store.sc.add(*category)#add是追加模式
store.sc.clear()#清空此商家的商品
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#让指定商品分类添加指定的商家,反向查询
store = Store.objects.create(name="商家E")
category = Category.objects.get(name="电脑整机")
category.store_set.add(store)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 让所有商家都添加这个分类
stores = Store.objects.all()
category = Category.objects.get(name="电脑整机")
category.store_set.add(*stores)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#让所有商家去除这个分类
category.store_set.clear()
# 删除store_set的所有商家
category.store_set.all().delete()
#只有子表才有"子表名小写_set"的写法,得到的是一个QuerySet集合,后边可以接.add(),.remove(),.update(),.delete(),.clear()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python-Django
一般在urls.py中配置url,在models.py中配置model,在views.py中配置View。
py3study
2020/01/03
7670
Django-model进阶(中介模型,查询优化,extra,整体插入)
QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 。它等同于SQL 的LIMIT 和OFFSET 子句。 1 >>> Entry.objects.all()[:5]      # (LIMIT 5) >>> Entry.objects.all()[5:10] # (OFFSET 5 LIMIT 5) 不支持负的索引(例如Entry.objects.all()[-1])。通常,查询集 的切片返回一个新的查询集 —— 它不会执行查询。 可迭代 ar
用户1214487
2018/01/24
1.7K0
Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(1)
  新版的pycharm很贴心的让每一个新的项目,都自动会在一个虚拟环境中,放心的新建项目就可以了,不用考虑虚拟环境的事儿了
玩蛇的胖纸
2018/10/10
2K0
Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(1)
Django+Vue开发生鲜电商平台之3.数据模型设计和资源导入
Github和Gitee代码同步更新: https://github.com/corleytd/Django_Fresh_Ecommerce; https://gitee.com/Python_Full_Stack/Django_Fresh_Ecommerce。
cutercorley
2020/07/23
2K0
Django+Vue开发生鲜电商平台之3.数据模型设计和资源导入
python【第二十篇】Django表的多对多、Ajax
这种方式无法直接操作第三张表,但是可以通过10行r这个对象,进行间接操作第三张表:
用户1432189
2018/09/05
7880
django 博客使用 annotate 统计分类下文章数量
博客文章通常都有分类,有时候我们会看到分类名后面还跟着该分类下的文章数量。前面我们通过学习 django 博客开发入门教程搭建了一个小博客。现在想在现有的基础上实现统计分类下有多少篇文章,该怎么做呢?最优雅的方式就是使用 django 模型的 annotate 方法。 假设我们的 django 博客有一个 Post 和 Category 模型,分别表示文章和分类: class Post(models.Model): title = models.CharField(max_length=70)
追梦人物
2018/04/17
2.2K0
四、Django关系表字段介绍
关系表介绍及使用 一对一关系 xx = models.OneToOneField(to='表名',to_field='字段名',on_delete=models.CASCADE) #on_delete:删除时的一些级联效果,to_field可以不写,默认是关联到另一张表的主键,on_delete在1.x版本的django中不用写,默认是级联删除的,2.x版本的django要写. 增加数据 方式1 new_author_detail = models.AuthorDetail.objects.cr
Dreamy.TZK
2020/04/09
5530
Django REST framework+Vue 打造生鲜超市(二)
三、Models设计 3.1.项目初始化 (1)进虚拟环境下安装 django2.0.2 djangorestframework和相关依赖mark,filter pillow  图片处理 pip install djangorestframework pip install -i https://pypi.douban.com/simple django==2.0.2 pip install markdown pip install django-filter pip install pillow
zhang_derek
2018/04/11
2.2K0
Django REST framework+Vue 打造生鲜超市(二)
Django ORM 一对多 和 多对多
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.CharField(max_length=32) pro = mod
kirin
2020/05/12
2.5K0
Django(15)外键和表关系[通俗易懂]
如果一个模型使用了外键。那么在对方那个模型被删掉后,该进行什么样的操作。可以通过on_delete来指定。可以指定的类型如下:
全栈程序员站长
2022/09/19
2.3K0
Django中的关系映射
级联删除,例如员工表中一项数据是部门ID,部门ID是部门表的主键,如果是级联删除,当删除了部门A的时候,会把所有属于部门A的员工都给删除。
Yuou
2022/09/26
1.8K0
Django_rest框架电商项目实践项目(一篇文章讲清楚电商项目)项目的创建与基本的配置,所有接口的代码,项目代码已给
做一个电商项目,就是卖不同品牌的电脑,可以根据不同的品牌进行查询,还有对订单的crud,还有用户的会员中心功能模块。还有收货地址模块
一写代码就开心
2022/01/21
2.8K0
Django_rest框架电商项目实践项目(一篇文章讲清楚电商项目)项目的创建与基本的配置,所有接口的代码,项目代码已给
Django进阶-8-ORM多对多
Django ORM 中一个类名对应一张表,要想操作表就 models.类 直接操作那张表。如果使用 ManyToManyField 字段生成“第三张”关系表,可以通过单个 obj 对象 间接操作。
小团子
2019/07/18
5640
Django进阶-8-ORM多对多
Django基础——ORM字段和字段参数
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象(
py3study
2020/01/16
1.7K0
Django实战-信息资讯-资讯模型
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2019/07/18
5460
Django实战-信息资讯-资讯模型
django models.py(python和django)
模型类如果未指明表名,Django默认以小写app应用名_小写模型类名为数据库表名。
全栈程序员站长
2022/07/29
1.1K0
django models.py(python和django)
Python:Django搭建博客
注册完后,在项目根目录中(即 manage.py 所在的目录)创建 templates 文件夹,使用 pycharm 创建项目会自动帮我们创建
用户8832503
2021/08/20
6200
django入门:数据模型
博客:https://www.jianshu.com/p/ec32dbc5c8d2
陈宇明
2020/12/15
8580
django入门:数据模型
Django 模型层之多表操作
Django还提供了一种直观而搞笑的方式在查询(lookups)种表示关联关系,它能自动确认SQL JOIN联系。要做跨关系查询,就使用两个下划线来连接模型(model)间关联字段的名称,知道最终链接到你想要的model为止。
py3study
2020/01/18
1.4K0
统计各个分类下的文章数
在我们的博客侧边栏有分类列表,显示博客已有的全部文章分类。现在想在分类名后显示该分类下有多少篇文章,该怎么做呢?最优雅的方式就是使用 Django 模型管理器的 annotate 方法。 模型回顾 回顾一下我们的模型代码,Django 博客有一个 Post 和 Category 模型,分别表示文章和分类: blog/models.py class Post(models.Model): title = models.CharField(max_length=70) body = model
追梦人物
2018/04/17
1K0
推荐阅读
相关推荐
Python-Django
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验