国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

odoo關系型字段domain寫法

2019-11-08 02:52:28
字體:
來源:轉載
供稿:網友

1.  多對一關系: Many2one

2. 多對多關系: Many2many

3. 一對多關系: One2many

 

1.  多對一關系: Many2one

 

 

ondelete 屬性 

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 屬性 

 (0,0,{values}) 根據 values 里面的信息新建一個記錄。 

(1,ID,{values})更新 id=ID 的記錄(寫入 values 里面的數據) 

(2,ID) 刪除 id=ID 的數據(調用 unlink 方法,刪除數據以及整個主從數據鏈接關系) 

(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

 條件: 如果知道患者id和 禁用cloe=True,求 isleep.doctor.patient.rel 紀錄, 及該紀錄下有多少個疾病?答: 一條search就搞定。。。

       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

 

 

 one2many 屬性 

(0, 0,{ values })根據 values 里面的信息新建一個記錄

(1,ID,{values}) 更新 id=ID 的記錄(對 id=ID 的執行 write 寫入 values 里面的數據)

(2,ID) 刪除 id=ID 的數據(調用 unlink 方法,刪除數據以及整個主從數據鏈接關系)

 
 
 

 

在數據庫表中該one2many字段并不存在。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金湖县| 西青区| 门源| 海安县| 上虞市| 龙口市| 元氏县| 万山特区| 禹州市| 浙江省| 邯郸市| 大丰市| 涟水县| 望城县| 威信县| 克拉玛依市| 莱阳市| 新平| 辽源市| 扎赉特旗| 天镇县| 正安县| 塔河县| 塔城市| 新蔡县| 哈巴河县| 恩施市| 瑞金市| 安多县| 于田县| 吴旗县| 综艺| 敖汉旗| 东光县| 松阳县| 门头沟区| 云南省| 新建县| 山丹县| 寿宁县| 瑞昌市|