我想浏览一个很多2字段,但是出现了这个错误:
文件“C:\ Program Files(x86)\ OpenERP 7.0 \ Server \ server \ openerp \ addons \ schoolem \ schoolem_dispense_cours.py“,第39行,在创建AttributeError:'** browse_record_list'对象有 没有属性
heure_cours_dispense_id
这是代码:
class schoolem_dispense_cours(osv.Model):
_name = 'schoolem.dispense_cours'
_columns = {
'name' : fields.char('Code',required=True,help="Champ automatique"),
'cours_id' : fields.many2one('schoolem.cours','Nom du Cour',required=True),
'aca_id' : fields.many2one('schoolem.aca','Annee Academique',required=True),
'enseignant_id' : fields.many2one('res.users','Enseignant',required=True),
'salle_de_classe_id' : fields.many2one('schoolem.salle_de_classe','Salle de classe',required=True),
'heure_cours_id' : fields.many2many('schoolem.heure_cours_dispense','schoolem_dispense_cours_heure_cours_dispense','dispense_cours_id','heure_cours_dispense_id','Heures de cour'),
#'heure_cours_id' : fields.many2many('schoolem.heure_cours_dispense',required=True),
}
def create(self, cr, uid, vals, context=None):
if not vals['heure_cours_id'][0][2]:
raise osv.except_osv(('Erreur!'), ('Une Programmation doit avoir au moins une heure de cours!'))
ids = self.search(cr,uid,[('aca_id','=',vals['aca_id'])])
created_hc = []
if ids :
for id in ids :
obj_disp_crs = self.pool.get('schoolem.dispense_cours').browse(cr,uid,id)
created_hc.append(obj_disp_crs.heure_cours_id.heure_cours_dispense_id)
答案 0 :(得分:1)
在很多2个字段中,我们可以添加多个记录。因此,如果我们尝试浏览many2many字段,我们将获得多个记录或浏览器。您可以实现与以下相同的功能:
def create(self, cr, uid, vals, context=None):
ids = self.search(cr,uid,[('aca_id','=',vals['aca_id'])], context=context)
created_hc = []
for obj_disp_crs in self.browse(cr, uid, ids, context=context):
created_hc.extend([x.heure_cours_dispense_id for x in obj_disp_crs.heure_cours_id])
但是这段代码还有另一个问题,因为在执行这个create函数之后,将创建一个满足条件aca_id = vals ['aca_id']的新记录。但是你不会在搜索条件中获得此记录ID
ids = self.search(cr,uid,[('aca_id','=',vals['aca_id'])], context=context)
因为此记录是在执行此create函数后创建的。所以为了获得这个id,你需要先调用create函数的super,然后执行更多的功能。