简介
关系数据库,关系,还是关系。
一:many2one
odoo.fields类。Many2one [来源] 此类字段的值是大小为 0(无记录)或 1(单条记录)的记录集。 参数 comodel_name ( str ) – 目标模型的名称, Mandatory相关或扩展字段除外。 domain – 在客户端(域或字符串)上设置候选值的可选域 context ( dict ) – 处理该字段时在客户端使用的可选上下文 ondelete ( str ) – 当引用的记录被删除时要做什么;可能的值为:, ,'set null''restrict''cascade' auto_join ( bool ) – 是否在搜索该字段时生成 JOIN(默认值False:) delegate ( bool ) – 将其设置True为使目标模型的字段可从当前模型访问(对应于_inherits) check_company ( bool ) – 标记要验证的字段 _check_company()。根据字段属性添加默认公司域。
很多个产品类别可能性(另表的行),到这个产品的类别(字段),选一个。
很多个学校,到这个学生的所在学校,选一个。
如下:产品类别是一个model,在库存--基本设置--产品类别设置
在产品中,产品类别就是一个many2one,是一个可以下拉选择的下拉框
读取产品类别这个model的所有内容,填到下拉框的可选项去。
model设置:
class ProductCategory(models.Model): _name = "product.category" name = fields.Char('Name', index=True, required=True)
class ProductTemplate(models.Model): _name = "product.template" categ_id = fields.Many2one( comodel_name='product.category', string='Product Category')
view设置:
<form> <field name="categ_id"/> </form> <tree> <field name="categ_id" optional="hide"/> </tree> #optional="hide",是默认不显示出来,在右上脚点选才出来。
二:many2many
odoo.fields类。Many2many [来源] Many2many 字段;这样一个字段的值就是记录集。 参数 comodel_name – 目标模型的名称(字符串),除非是相关或扩展字段,否则为必填项 关系( str ) – 在数据库中存储关系的表的可选名称 column1 ( str ) – 引用表中“这些”记录的列的可选名称relation column2 ( str ) -- 引用表中“那些”记录的列的可选名称relation 属性relation,column1和column2是可选的。如果没有给出,名称是从模型名称自动生成的,提供的model_name和comodel_name不同的! 请注意,ORM 不接受在具有相同协模型的给定模型上具有隐式关系参数的多个字段,因为这些字段将使用同一个表。ORM 防止两个 many2many 字段使用相同的关系参数,除非 两个字段使用相同的模型、协模型,并且关系参数是显式的;或者 至少一个字段属于具有 的模型。_auto = False 参数 domain – 在客户端(域或字符串)上设置候选值的可选域 context ( dict ) – 处理该字段时在客户端使用的可选上下文 check_company ( bool ) – 标记要验证的字段 _check_company()。根据字段属性添加默认公司域。 limit ( int ) -- 读取时使用的可选限制
三:one2many
odoo.fields类。One2many [来源] One2many 字段;这样一个字段的值是所有记录的记录集,comodel_name使得该字段inverse_name等于当前记录。 参数 comodel_name ( str ) – 目标模型的名称 inverse_name ( str ) – 中的反向Many2one字段的 名称comodel_name domain – 在客户端(域或字符串)上设置候选值的可选域 context ( dict ) – 处理该字段时在客户端使用的可选上下文 auto_join ( bool ) – 是否在搜索该字段时生成 JOIN(默认值False:) limit ( int ) -- 读取时使用的可选限制 属性comodel_name和inverse_name是强制性的,除非是相关字段或字段扩展。
由于有反向字段名称,所以创建one2many,必须创建关联表格的many2one。
一般用于新输入。
一个产品的供应商(多个),允许有很多个供应商可能性(另一个表的行,多选)。
一个学校,允许有很多个学生的可能行。
产品的供应商是一个one2many,一个产品可以有多个供应商
四:关系
many2one,是最简单的一个关系,创建外键,关联到目标表。用在下拉选择可选项,只能选一个。
one2many,由many2one扩展而来,many2one的反向关系。论坛说是用来输入的,不能选,选的话要用many2many。
many2many,略难一点,创建一个关联表,只有两个字段,两个都是外键,关联到两个表。
那么就相当于 关联表 字段1 many2one 表1
关联表 字段2 many2one 表2
纯属误打误撞才搞明白这个事。
有一个设备信息表,有一个入库表,还有一个入库明细表。
设备信息表没什么好说的,
入库表,一个入库表,应该包含多种设备,所以就有了入库明细表。
入库明细表是many2one入库表。入库表one2many到入库明细表。
入库明细表是many2one设备信息表。
忽略入库表one2many到入库明细表。
只考虑:
入库明细表是many2one入库表。
入库明细表是many2one设备信息表。
就是我自己写了个中间表(入库明细表),确实达到了我想要的效果,增加明细行,是下拉可选的。
many2many就是省的自己写中间表了。
笔记有空再整理。
自己能看懂就好了。