0

many2many フィールドを参照したいのですが、次のエラーが発生しました:

ファイル "C:\Program Files (x86)\OpenERP 7.0\Server\server\openerp\addons\schoolem\schoolem_dispense_cours.py"、39 行目、作成 AttributeError: '**browse_record_list' object has no attribute

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)
4

1 に答える 1

1

many2many フィールドでは、複数のレコードを追加できます。したがって、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])

しかし、このコードには別の問題もあります。この作成関数の実行後、条件 aca_id = vals['aca_id'] を満たす新しいレコードが作成されるからです。ただし、検索条件でこのレコード ID を取得することはできません

ids = self.search(cr,uid,[('aca_id','=',vals['aca_id'])], context=context)

このレコードは、この create 関数の実行後に作成されるためです。したがって、この ID も取得するには、最初に作成関数のスーパーを呼び出してから、追加の機能を実行する必要があります。

于 2013-11-03T05:10:52.507 に答える