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

如何在many2many字段中添加ondelete参数?

在数据库设计中,many2many字段是指两个表之间的多对多关系。在Odoo框架中,可以通过添加ondelete参数来定义many2many字段的级联删除行为。

ondelete参数用于指定当关联的记录被删除时,many2many字段中的记录应该如何处理。它可以设置为以下几个选项之一:

  1. cascade:级联删除。当关联的记录被删除时,many2many字段中的相关记录也会被自动删除。
  2. set null:设置为空。当关联的记录被删除时,many2many字段中的相关记录会被设置为NULL。
  3. restrict:限制删除。当关联的记录被删除时,如果many2many字段中还存在相关记录,则不允许删除关联的记录。
  4. no action:不执行任何操作。当关联的记录被删除时,many2many字段中的相关记录不受影响。

下面是一个示例代码,演示如何在many2many字段中添加ondelete参数:

代码语言:txt
复制
from odoo import models, fields

class MyClass(models.Model):
    _name = 'my.class'
    
    name = fields.Char(string='Name')
    students = fields.Many2many('my.student', string='Students', ondelete='cascade')

class MyStudent(models.Model):
    _name = 'my.student'
    
    name = fields.Char(string='Name')

在上述示例中,MyClass模型中的students字段是一个many2many字段,它与MyStudent模型建立了多对多关系。通过设置ondelete='cascade',当MyStudent模型中的某个记录被删除时,与之相关的MyClass模型中的相关记录也会被自动删除。

请注意,以上示例中的代码是基于Odoo框架的,如果您使用的是其他框架或数据库,具体的实现方式可能会有所不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • odoo ORM API学习总结兼orm学习教程

    这通过在数据库层面为列添加NOT NULL 约束来实现 index (bool) – 是否为字段添加索引。注意:对不存储、虚拟字段不起作用。...] Many2many字段的值为一个结果集。...ORM阻止两个Many2many字段使用相同的relation参数,除非: 两个字段都使用相同的模型, comodel并显示指定relation参数,否则 至少有一个字段属于携带_auto = False...取决于字段属性,添加一个默认的公司条件 limit (int) – 读取时用的可选限制 注意:odoo不会在当前模型对应表为One2many,Many2many类型的属性建立对应的表字段,但会为Many2one...Many2many 或者 One2many 字段 related 可以用于引用另一个模型的 One2many 或Many2many 字段,前提是通过当前模型的一个Many2one关系来实现的。

    13.4K10

    Go开源ORM——GORM

    依赖安装 github.com/jinzhu/gorm 定义实体类 注意: 实体类结构体,要映射到数据库的字段首字母必须大写,否则会被忽略 可以通过定义嵌套gorm.Model这个结构体的类型来定义实体类...,gorm.Model定义了数据库表的一些常用基本字段 type Model struct { ID uint `gorm:"primary_key"` CreatedAt time.Time...作为参数占位符,如果参数是集合类型,使用(?)作为占位符 // 获取第一个匹配记录 db.Where("name = ?"...emails on emails.user_id = users.id") .Scan(&res) } Scopes 通过Scopes可以将Where语句封装为方法来使用,动态添加参数...User user.ID = 1 db.Model(&user).Association("Languages") // user是源,它需要是一个有效的记录(包含主键) // Languages是关系源的字段

    2.1K41

    GORM 使用指南

    参数"。具体的参数说明如下:charset=utf8mb4:设置字符集为 UTF-8。parseTime=True:自动解析数据库的时间字段为 Go 的时间类型。...User 结构体包含了 gorm.Model 结构体,这是 GORM 提供的一个内置模型结构体,包含了一些常用的字段 ID、CreatedAt、UpdatedAt、DeletedAt,用于记录记录的主键...3.2 模型字段标签解析在模型定义,我们可以通过在字段添加标签来指定字段的属性和约束。常用的标签包括:gorm:"column:column_name":指定字段在数据库的列名。...下面是一个示例,展示了如何在模型字段添加标签:type Product struct { ID uint `gorm:"primaryKey;autoIncrement"`...在 User 结构体,我们定义了一个名为 Roles 的切片字段,并通过 gorm:"many2many:user_roles" 标签指定了中间表的名称,用于表示用户与角色的多对多关联关系。

    84400

    在 SAP BAS 里使用 SAP UI5 应用消费 OData 的 Create 和 Delete

    在 SAP Business Application Studio 里创建一个 SAP UI5 应用,应该具有如下的项目结构: 打开 Home.view.xml, 添加一个 Create 按钮: <Button...点击 Create 按钮,弹出对话框: 维护了必填字段后,点击 Create: 能看到成功创建的 Sales Order: 下面进行删除操作的实现。...才允许点击删除按钮: <Button id="deleteButton" icon="sap-icon://delete" tooltip="Delete" visible="false" press="<em>onDelete</em>...<em>参数</em> groupId 指定默认批处理组,默认为 $auto。 开发人员可以使用<em>参数</em> updateGroupId 为更新请求设置批处理组。 如果不设置此<em>参数</em>,将使用 groupId。...以下代码实例化了一个模型,该模型将批处理组“myAppUpdateGroup”<em>中</em>的所有更新请求捆绑在一起; 然后可以使用 oModel.submitBatch("myAppUpdateGroup") 发送批处理请求

    7900

    从XML架构生成类

    如果选择此选项,向导将向属性定义添加XMLNIL=1。 否则不添加参数。 该参数的详细信息请参见将对象投影到XML的“处理空字符串和空值”。...如果选择此选项,向导将向属性定义添加XMLNILNOOBJECT=1。 否则不添加参数。 该参数的详细信息请参见将对象投影到XML的“处理空字符串和空值”。 选择Next。...确实选择了使用父子关系,请不要选择此选项;父子关系已经提供了类似的逻辑。 注意:如果修改生成的类,请确保根据需要修改%OnDelete()回调方法。...在这里,指定包含该行显示的XML名称空间的类的包。要执行此操作,请在程序包名字段为该行指定程序包名。 选择下一步。...XMLIGNORENULL-如果选择此选项,向导会将XMLIGNORENULL=1添加到类定义。否则,它不会添加参数

    1.6K20

    odoo 开发入门教程系列-模块交互

    模块交互 在上一章,我们使用继承来修改模块的行为。在我们的房地产场景,我们希望更进一步,能够为客户生成发票。...super 调用 提示: 为了确保它正常工作,添加一个print 或者调试断点到重写的方法。...不幸的是,没有一种简单的方法可以知道如何在Odoo创建任何给定的对象。大多数时候,有必要查看其模型,以找到所需的字段并提供适当的值。 学习的一个好方法是看看其他模块是如何完成你想做的事情的。...create 方法不接受结果集作为字段值。...为此在account.move创建中包含invoice_line_ids字段,这是一个One2many字段。One2many和Many2many使用通用ORM方法描述的特殊“commands”。

    1.7K10

    Go结构体标签

    结构体标签定义通过 reflect.Type 获取结构体成员信息 reflect.StructField 结构的 Tag 被称为结构体标签(Struct Tag)。...在使用指定数据库数据类型时,它需要是完整的数据库数据类型,:MEDIUMINT UNSIGNED not NULL AUTO_INCREMENTsize指定列大小,例如:size:256primaryKey...,- 无读写权限comment迁移时为字段添加注释关联标签GORM 允许通过标签为关联配置外键、约束、many2many 表:标签名说明foreignKey指定当前模型的列作为连接表的外键references...指定引用表的列名,其将被映射为连接表外键polymorphic指定多态类型,比如模型名polymorphicValue指定多态值、默认表名many2many指定连接表表名joinForeignKey指定连接表的外键列名...binding:"lt=3"小于3gt参数值大于给定值binding:"gt=3"大于3oneof参数值只能是枚举值的一个,值必须是数值或字符串,以空格分隔,如果字符串中有空格,将字符串用单引号包围binding

    1.2K31

    SQLAlchemy

    不过学习本课程时并不需要这么做,在创建数据库的同时添加 CHARACTER SET = UTF8 指定编码格式即可。...,user 为数据表名,id 为字段名 # 第二个参数 ondelete 设置删除 User 实例后对关联的 Course 实例的处理规则 # 'CASCADE' 表示级联删除,删除用户实例后,对应的课程实例也会被连带删除...# 第一个参数为位置参数参数值为外键关联的映射类名,数据类型为字符串 # 第二个参数 backref 设置反向查询接口 # backref 的第一个参数 'course' 为查询属性,User 实例使用该属性可以获得相关课程实例的列表...install ipython 完成后终端执行 ipython 命令,即可进入命令行交互解释器: In [38]: from faker import Faker # 引入 Faker 类 创建实例,添加参数...session 会话,以备提交到数据库 # 注意,此时的 user 对象没有 id 属性值 # 映射类的主键字段默认从 1 开始自增,在传入 session 时自动添加该属性值

    1K10

    实体处理模块IEntityModule

    IEntity entity) { XTrace.WriteLine("删除实体 " + entity.GetType().Name); return base.OnDelete...OnValid等同于实体类的Valid,新增或修改实体对象时会调用,通过isNew参数区分。因为绝大多数业务逻辑的新增和修改都有关系,所以把它们做到一块。 OnDelete就是删除拦截啦。...如果想做假删除,就是在这里把删除标记字段改为true,然后entity.Update保存,接着返回false让外部不要继续执行Delete 在XCode内部,有三个最常用的接口实现:UserModule...使用当前时间,新增修改时UpdateTime使用当前时间 3,新增时CreateIP使用当前访问地址(通过WebHelper.UserHost),新增修改时UpdateIP使用当前访问地址 所以,这六个字段赫赫有名...Meta.Modules.Add(); Meta.Modules.Add(); Meta.Modules.Add(); } 实际使用

    559100

    实体处理模块IEntityModule

    IEntity entity) { XTrace.WriteLine("删除实体 " + entity.GetType().Name); return base.OnDelete...OnValid等同于实体类的Valid,新增或修改实体对象时会调用,通过isNew参数区分。因为绝大多数业务逻辑的新增和修改都有关系,所以把它们做到一块。 OnDelete就是删除拦截啦。...如果想做假删除,就是在这里把删除标记字段改为true,然后entity.Update保存,接着返回false让外部不要继续执行Delete 在XCode内部,有三个最常用的接口实现:UserModule...使用当前时间,新增修改时UpdateTime使用当前时间 3,新增时CreateIP使用当前访问地址(通过WebHelper.UserHost),新增修改时UpdateIP使用当前访问地址 所以,这六个字段赫赫有名...Meta.Modules.Add(); Meta.Modules.Add(); Meta.Modules.Add(); } 实际使用

    36400

    Jetpack组件之Room

    在注释添加与数据库关联的实体列表。 包含具有0个参数且返回使用@Dao注释的类的抽象方法。 Entity:表示数据库的表。 DAO:包含用于访问数据库的方法。...DAO可以是接口,也可以是抽象类,如果是抽象类,则该DAO可以选择有一个以RoomDatabase为唯一参数的构造函数。Room 会在编译时创建每个 DAO 实现。在DAO文件上方添加@DAO注解。...* select *from cache where【表列名】 =:【参数名】------>等于 * where 【表列名】 < :【参数名】 小于 * where 【表列名】...between :【参数名1】 and :【参数2】------->这个区间 * where 【表列名】like :参数名----->模糊查询 * where 【表列名】 in...(:【参数名集合】)---->查询符合集合内指定字段值的记录 */ //如果是一对多,这里可以写List @Query("select *from cache

    1.9K20
    领券