odoo关系型字段domain写法
来源:互联网 发布:传奇数据库db排序器 编辑:程序博客网 时间:2024/05/22 15:26
1. 多对一关系: Many2one
2. 多对多关系: Many2many
3. 一对多关系: One2many
1. 多对一关系: Many2one
no atction:相互不影响
cascade:主键被删除,外键对应的记录也删除。直接删除外键的记录,不影响主键。
restrict: 如果存在外键,主键删除的时候报错。
set null:主键被删除,外键变为空值。
set default:主键被删除,外键变为默认值。
class IsleepDoctorSayDrug(models.Model):
_name = 'isleep.doctorapp.drug' _description = u'医生说药的药品' base_drug_id = fields.Many2one('isleep.drug', u'关联基础药品', required=True, ondelete="cascade") #在数据表中Many2one字段存在。。。 generic_id = fields.Many2one('isleep.generic.drug', u'通用名', index=True, related='base_drug_id.generic_id', readonly=True) is_example = fields.Boolean(u'示例')
class IsleepGenericDrug(osv.osv): _name = 'isleep.generic.drug' _description = u'药品通用名' _columns = { 'name': fields.char(u'药品通用名称', required=True, select=True),
def test_many2one(self, req, **kw):
"""
:params args:
*drug_id
*name
"""
base_drug_id = int(kw.get('base_drug_id', -1))
name = kw.get('name', '')
doctorapp_durg_obj = req.env['isleep.doctorapp.drug'].sudo()
doctorapp_durg_data = doctorapp_durg_obj.search([('base_drug_id', '=', base_drug_id), ('generic_id.name', '=', name)])
ret = {
'base_drug_id': doctorapp_durg_data.base_drug_id.name,
'is_example': doctorapp_durg_data.is_example,
}
return make_response('S0000', ret)
return:
"data": {
"base_drug_id": "1112",
"is_example": false
}
条件:如果有base_drug_id和name, 求(医生说药的药品)?
答:比较简单的方法(一条search)
使用doctorapp_durg_obj.search([('base_drug_id', '=', base_drug_id), ('generic_id.name', '=', name)]) ,得出(医生说药的药品)对象
2. 多对多关系: Many2many
many2many 属性
(1,ID,{values})更新 id=ID 的记录(写入 values 里面的数据)
(3,ID) 切断主从数据的链接关系但是不删除这个数据
(4,ID) 为 id=ID 的数据添加主从链接关系。
(5) 删除所有的从数据的链接关系就是向所有的从数据调用(3,ID)
(6,0,[IDs]) 用 IDs 里面的记录替换原来的记录(就是先执行(5)再执行循环 IDs 执行(4,ID)
class IsleepDoctorImportantPatient(models.Model):
_name = "isleep.doctor.patient.rel"
important = fields.Boolean(u"是重要患者")
remark = fields.Text(u'备注信息')
patient_id = fields.Char( string=u'患者', index=True, required=True)
diseases = fields.Many2many('isleep.hospital.disease','isleep_hospital_disease_patient_rel', 'patient_id', 'disease_id', u'疾病')
subscribe = fields.Boolean(u'正在关注')
_sql_constraints = [
('record_uniq', 'unique(patient_id)', u'请勿创建重复数据(患者相同)')
]
class IsleepHospitalDisease(models.Model):
_name = 'isleep.hospital.disease'
_description = u"疾病模型"
code = fields.Char(u'编码')
priority = fields.Integer(u'优先级', default=1000, index=True)
close = fields.Boolean(u'禁用', default=False)
@http.route('/isleep/patientapp/guide/disease/save', type='json', auth='none')
def isleep_patientapp_guide_disease_save(self, req, **kw):
subscribe = req.jsonrequest.get('subscribe'))
doctor_patient_obj = req.env['isleep.doctor.patient.rel'].sudo()
doctor_patient = doctor_patient_obj.search([('patient_id', '=', patient_id), ('subscribe', '=', True)])
if doctor_patient:
doctor_patient[0].write({
'subscribe': True,
'diseases': [(6, 0, [disease_id])] #替换原来的记录
})
场景:一个患者只能有一个疾病。。。
患者-首页,编辑您选择的疾病, 一次只能单选,当下一次再编辑的时候, 替换之前选择的疾病,
注释:diseases = fields.Many2many('isleep.hospital.disease','isleep_hospital_disease_patient_rel', 'patient_id', 'disease_id', u'疾病')
isleep.hospital.disease: 必填关联的对象
isleep_hospital_disease_patient_rel: 新增的关联表
patient_id: 当前对象的 ID
disease_id: isleep.hospital.disease对象 ID
doctor_patient_data = rel_obj.search([('patient_id', '=', patient_id), ('diseases.close', '=', close)])
该纪录 len(doctor_patient_data) = 1
该纪录下的疾病 len(doctor_patient_data.diseases) = 2在数据库表中该字段(diseases)并不存在。存在的是 isleep_hospital_disease_patient_rel表,纪录两张表之间的对应关系。。。
3. 一对多关系: One2many
(0, 0,{ values })根据 values 里面的信息新建一个记录
(1,ID,{values}) 更新 id=ID 的记录(对 id=ID 的执行 write 写入 values 里面的数据)
(2,ID) 删除 id=ID 的数据(调用 unlink 方法,删除数据以及整个主从数据链接关系)
在数据库表中该one2many字段并不存在。
- odoo关系型字段domain写法
- Odoo的Domain (一)
- 如何更改Odoo中关系字段的显示值
- odoo(Openerp)如何在字段的on_change方法中动态返回domain
- odoo开发domain的使用
- 关于odoo中的domain比较运算符
- odoo字段定义的参数
- odoo里面Python的一些简便写法
- Odoo domain 中的 like, ilike, =like, =ilike 举例说明
- odoo开发字段解析(新API)
- Odoo(OpenERP)开发实践:基本字段类型
- odoo之模块字段(Fields)
- Odoo
- domain类 service类 写法参考
- OpenERP7.0 Domain条件表达式写法小结
- OpenERP7.0 Domain条件表达式写法小结
- Django-restframework19 Serializer关系型字段
- odoo/openerp开发字段解析(旧API)
- MinGW使用
- JavaScript数据类型的一些注意点
- CF - 665E 字典树
- Android Studio编译出错 AssertionError:
- 探索Glide对Gif图片资源的获取、解析过程
- odoo关系型字段domain写法
- 动态链接和静态链接
- 博客新家地址
- 夕拾算法进阶篇:31)最短路径Dijkstra(图论)
- 软件开发的书
- 对泛型和多态的粗浅理解
- Dynamic Time Warping(DTW)动态时间规整算法
- spfa && 判断负环
- Android 6种开源框架及简介