首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django多层嵌套ManyToMany字段ORM操作详解

在用django写项目时,遇到了许多场景,关于ORM操作获取数据的,但是不好描述出来,百度搜索关键词都不知道该怎么搜,导致一个人鼓捣了好久。...,使用distinct()和annotate()问题记录 model类如下,我在class Meta中设置了ordering = [‘-date_create’],即模型对象返回的记录结果集是按照这个字段排序的...host_name").annotate(dcount=Count(1)) p <QuerySet [{'host_name': '点2', 'dcount': 1}, {'host_name': '点3'..., 'dcount': 2}, {'host_name': '点2', 'dcount': 1}, {'host_name': '点3', 'dcount': 1}] print(p.query...以上这篇Django多层嵌套ManyToMany字段ORM操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考。

1.1K10

DRF中多对多ManytoMany字段更新和添加

)就这样给自己挖了坑因为想要在添加订单的同时也要添加对应菜品的数量于是自定义了中间表并且添加了数量字段(噩梦开始~~~)首先是定义模型类models.py# models.pyimport django.utils.timezone...as timezonefrom django.contrib.auth.models import Userfrom django.db import modelsfrom serverorders.models...但是实在是没心思搞了 orderMenu = request.data.get('orderMenu') for i in orderMenu: # 我的思路是既然不能在更新主表的时候更新多对多字段那就单独把多对多字段提出来更新...如果解决的话应该还是要加判断或者其他的处理方法3、针对第二点的解决方法个人认为如果有新的菜品添加的话就要删除当前的订单再重新添加这样的逻辑应该就说的通了,不过具体还要看使用的需求。...主要是一个思路,drf 的ModelSerializer 和 ModelViewSet 封装的太严实了,通过这样的方法来更新和添加多对多字段实属自己技术不成熟。

68420
您找到你想要的搜索结果了吗?
是的
没有找到

Django 多对多字段更新和插入数据实例

request.POST.get('publish') #-------值为:1 G_authors_list=request.POST.getlist('authors')#-------值为:[3,7...request.POST.get('publish')#-------值为:2 G_authors_list = request.POST.getlist('authors')#-------值为:[3,5...等的查询集(QuerySet) book_obj.save() #-------一定得save(),才能对数据库进行修改 return redirect('/index/') 补充知识:Django...,Django允许指定一个用于管理多对多关系的中间模型,然后就可以把这些额外的字段添加到这个中间模型中,具体的方法就是在ManyToMany字段中指定through参数指定作为中介的中间模型,修改上述models.py...多对多字段更新和插入数据实例就是小编分享给大家的全部内容了,希望能给大家一个参考。

4.2K30

django使用F方法更新一个对象多个对象字段的实现

通常情况下我们在更新数据时需要先从数据库里将原数据取出后放在内存里,然后编辑某些字段或属性,最后提交更新数据库。使用F方法则可以帮助我们避免将所有数据先载入内存,而是直接生成SQL语句更新数据库。...from django.db.models import F Product.objects.update(price=F(‘price’) * 1.2) 我们也可以使用F方法更新单个对象的字段,...product = Product.objects.get(pk=5009) product.price = F('price') * 1.2 product.save() 但值得注意的是当你使用F方法对某个对象字段进行更新后...ADBES682BOEO', 'name': '张三', 'mobile': '12345678911', 'mail': 'test@test.com' } 3....使用F方法更新一个对象多个对象字段的实现就是小编分享给大家的全部内容了,希望能给大家一个参考。

3K20

Django学习笔记之Queryset详解

注意:这里只是查询Entry表,返回的a的每条记录只包含Entry表的字段值,不管Entry的model中是否有onetoone、onetomany、manytomany字段,都不会关联查询。...Entry WHERE NOT (pub_date > '2005-1-3' AND headline = 'Hello') 2.4 SQL其它关键字在django中的实现 在SQL中,很多关键词在删...聚合函数可以像filter那样关联表,即在聚合函数中,Django对OneToOne、OneToMany、ManyToMany关联查询及其反向关联提供了相同的方式,见下面例子。...,即使在查询时关联了其它表,关联表的字段也不会返回,只有当我们通过Author instance用关联表时,Django才会再次查询数据库获取值。...offset 5; MySQL的SQL语句为select * from tablename limit 5,3 参考

2.7K30

Orm之中介模型

什么是中介模型 中介模型针对的是ManyToMany(多对多)的时候第三张表的问题, 中介模型其实指的就是我们不通过Django创建第三张表,如果自己不创建第三张表,而是由django给我们创建,那就不存在你中介模型...中介模型示例 普通的ManyToMany示例 class Book(models.Model): title = models.CharField(max_length=32) authors...models.ManyToManyField(to='Author') class Author(models.Model): name = models.CharField(max_length=32) 这时候Django...图中可以看出,Django创建ForeignKey的时候会在字段后自动添加'_id',所以,我们在写第三张表字段的时候就不用加_id了,如下: class Book(models.Model):...自建表的区别 1、中介模型的第三张表是自己创建的,所以可以自己任意添加额外的字段,而Django自创建的第三张表的字段是固定的 2、中介模型没有add,set  , remove,clear 方法

81950

django写接口(优化篇)

作者:Kuky_xs 博客:https://www.jianshu.com/u/9fcd71535294 前言 系列文章: 《django入门:环境及项目搭建》 《django入门:数据模型》 《django...入门:视图及模版》 《django入门:Admin管理系统及表单》 《django入门:通用视图类重构视图》 在《用django写接口(入门篇)》提到这篇会讲 views 的代码优化,在这之前,我们先适当了解下...在结束文章的最后,记录自己写的时候遇到的一个坑,当更新 ManyToMany 字段的时候,我们需要重新写 post 方法,直接传 id 是不能更新的,直接传 id 是不能更新的,直接传 id 是不能更新的...# 假设我们的 post 有一个 ManyToMany 字段 tags class PostDetailView(APIView): # 更新的时候,需要约定好 ManyToMany...P[0-9]+)/&", views.PostDetailView.as_view(), name="api_post"), ] 修改完后我们就可以开心的更新 M2M 字段了,httpie 命令行如下

2.1K20

探索 PythonDjango 支持分布式多租户数据库,如 Postgres+Citus

将租户列介绍给我们想要分发的缺少它的模型 更改分布式表的主键以包含租户列 更新模型以使用 TenantModelMixin 分发数据 将 Django 应用程序更新为范围查询 准备横向扩展多租户应用程序...OneToOneField 和 ManyToMany 字段就是这种情况。 对于这些情况,您需要:1. 找到约束 2. 进行迁移以删除它们 3....重新创建约束,包括 account_id 字段 要查找约束,请使用 psql 连接到您的数据库并运行 \d+ myapp_projectmanager 你将看到 ManyToMany (或 OneToOneField...在 Django 应用程序的 requirements.txt 中,添加 django_multitenant>=2.0.0, <3 运行 pip install -r requirements.txt...set_current_tenant 函数也可以接受一个对象数组,比如 set_current_tenant([s1, s2, s3]) 它使用类似于 tenant_id IN (a,b,c) 的过滤器更新内部

2K10

Django Xadmin多对多字段过滤实例

在xadmin中是不能像原生admin那样使用formfield_for_manytomany方法来过滤多对多字段 ?...补充知识:给django admin后台管理user扩展下拉框及多选框的字段 1.首先在models.py中编写扩展User所用到的userProfile模型及下拉框和多选框选项值所需要的模型(因为我所做的下拉框和多选框的值都是从数据库里面取得...),代码如下: 2.第二步编写admin.py对User字段进行扩展,代码如下: # -*- coding: UTF-8 -*- from django.contrib import admin from...django import forms from TESTAPP.models import test,userProfile from django.contrib.auth.admin import...以上这篇Django Xadmin多对多字段过滤实例就是小编分享给大家的全部内容了,希望能给大家一个参考。

1.8K20

Django 之 Models(Models 模型 & 数据表关系)

欢迎阅读本专栏其他文章 Django 之路由篇 Django 之视图篇 Django 之模板篇 Models 模型 ORM --- ObjectRelationMap...的子类 class 中的所有属性对应表格中的字段 字段的类型都必须使用 modles.xxx 不能使用python中的类型 在django中,Models 负责跟数据库交互 django连接数据库 自带默认数据库...Sqlite3 关系型数据库 轻量级 建议开发用splite3,部署用mysql之类数据库 切换数据库在settings中进行设置 # django 连接 mysql...字段的类型都需使用 models.xxx 不能使用python 中的类型 字段常用参数 --- max_length: 规定数值的最大长度undefined blank: 是否允许字段为空,默认不允许...表示任意一个表的数据可以拥有对方表格多项数据,反之亦然 比如典型例子就是老师和学生的关系 使用上,在任意一方,使用ManyToMany定义,只需要定义一边add 添加老师,则在student.teachers.add

2.3K87

JPA实体类中的注解

关系被维护端: @ManyToMany(cascade={CascadeType.*},mapperBy="itself") 关系维护端 @ManyToMany(cascade={CascadeType...updateable:表示在ORM框架执行更新操作时,该字段是否应该出现在UPDATE语句中,默认为true。对于一经创建就不可以更改的字段,该属性非常有用,如对于birthday字段。 ...fetch:表示抓取策略,默认为FetchType.LAZY,因为关联的多个对象通常不必从数据库预先读取到内存  可选  cascade:表示级联操作策略,对于OneToMany类型的关联非常重要,通常该实体更新或删除时...,其关联的实体也应当被更新或删除  例如:实体User和Order是OneToMany的关系,则实体User被删除时,其关联的实体Order也应该被全部删除 @ManyToMany 描述一个多对多的关联...  mappedBy:表示多对多关联的另一个实体类的对应集合属性名称  两个实体间相互关联的属性必须标记为@ManyToMany,并相互指定targetEntity属性,  需要注意的是,有且只有一个实体的

3.8K70

django 博客使用 annotate 统计分类下文章数量

前面我们通过学习 django 博客开发入门教程搭建了一个小博客。现在想在现有的基础上实现统计分类下有多少篇文章,该怎么做呢?最优雅的方式就是使用 django 模型的 annotate 方法。...post 3 ... 1 4 post 4 ... 2 Category 表: name id category 1 1 category 2 2 这里前 3 篇文章属于 category 1,第...category 1 在 Category 表中对应的 id 是 1,django 就在 Post 表中搜索哪些行的 category_id 为 1,发现前 3 行都是,把这些行取出来就是 category...此外,annotate 方法不局限于用于本文提到的统计分类下的文章数,你也可以举一反三,只要是两个 model 类通过 ForeignKey 或者 ManyToMany 关联起来,那么就可以使用 annotate...models.Model): title = models.CharField(max_length=70) body = models.TextField() Tags = models.ManyToMany

2.1K70
领券