通过on_change方法创建和编辑one2many字段的项目

 mobiledu2502861767 发布于 2023-02-06 11:34

我有这个课(评价)

class schoolem_evaluation(osv.Model):
_name = 'schoolem.evaluation'
_columns = {
    'name' : fields.char('Evaluation',help="Champ automatique = periodeN_ExamenN_CoursX_SalleDeClasseS"),
    'aca_id' : fields.many2one('schoolem.aca','Annee Academique',required=True),
    'periode_id' : fields.many2one('schoolem.periode','Periode',required=True,help="Par exemple : trimestre01"),
    'examen_id' : fields.many2one('schoolem.examen','Examen',required=True),
    'salle_de_classe_id' : fields.many2one('schoolem.salle_de_classe','Salle de Classe',required=True),
    'cours_id' : fields.many2one('schoolem.cours','Cours',required=True),
    'note_ids' : fields.one2many('schoolem.note_evaluation','evaluation_id','Notes'),
}   

和这个班(note_evaluation)

class schoolem_note_evaluation(osv.Model):
    _name = 'schoolem.note_evaluation'
    _order = 'etudiant_id'
    _columns = {
        'name' : fields.float('Note',digits=(6,2),required=True),
        'evaluation_id' : fields.many2one('schoolem.evaluation','Evaluation',),
        'etudiant_id' : fields.many2one('schoolem.etudiant','Etudiant',required=True),
        'rang' : fields.integer('Rang'),
        'observation' : fields.text('Observation'),
    }

我希望用户在选择Evaluation_form中最后一个字段(cours_id)的值时,能够通过on_change方法生成one2many note_evaluation行; 并使生成的行直接出现在视图中,以便他可以插入每个note_evaluation行的名称值(注释).并保存所有.

可能吗?这是我当前的XML视图文件


                    
                    
                        
                            
                        

这是onchange功能:

def on_change_cours_id(self,cr, uid, ids,examen_id,salle_de_classe_id,cours_id,aca_id,context=None):

        context=context or {}

        #if context is None:

         #   context = {}
                for etud_id in etudiant_ids:

                    note_eval = self.pool.get('schoolem.note_evaluation')

                    if not context.get('id', False): #id de l'evaluation

                        context['id'] = context.get('evaluation_id')

                    eval_id = context.get('id', False)
                    raise osv.except_osv(('the form!'), (context.get('active_id')))

                    id = note_eval.create(cr, uid, {'name':0,'etudiant_id':etud_id,'evaluation_id':eval_id}, context=context)

有了这个,on_change方法在数据库中创建note_evaluation,但用户界面不加载它们,one2many字段保持为空.我观察到数据库中的note_evaluation没有评估_id.

怎么做?

1 个回答
  • 要使用onchange加载one2many数据,您不必从onchange函数创建one2many数据.您只需要为one2many字段创建值.例如

    def on_change_cours_id(self,cr, uid, ids,examen_id,salle_de_classe_id,cours_id,aca_id,context=None):
        context=context or {}
        note_ids = []
        value = {}
        if ids:
            old_note_ids = self.pool.get('schoolem.note_evaluation').search(cr, uid,[('evaluation_id','in',ids)])
            self.pool.get('schoolem.note_evaluation').unlink(cr, uid, old_note_ids)
        etudiant_ids = []
        #search for etudiant_ids with the conditions examen_id,salle_de_classe_id,cours_id,aca_id etc
        for etud_id in etudiant_ids:
            note_ids.append((0,0,{'name':0,'etudiant_id':etud_id}))
        value.update(note_ids=note_ids)
        return {'value':value}
    

    在这里我做了一个取消链接,因为当你保存这条记录并再次以某种方式加载onchange时,将显示新的one2many列表.但是当保存时,你可以看到旧记录和新记录.SO unlink将删除旧记录.另外,当附加到note_ids时,我使用了0,0,{values}的元组,以下是对此的解释

    (0, 0,  { values })    link to a new record that needs to be created with the given values dictionary
    (1, ID, { values })    update the linked record with id = ID (write *values* on it)
    (2, ID)                remove and delete the linked record with id = ID (calls unlink on ID, that will delete the object completely, and the link to it as well)
    (3, ID)                cut the link to the linked record with id = ID (delete the relationship between the two objects but does not delete the target object itself)
    (4, ID)                link to existing record with id = ID (adds a relationship)
    (5)                    unlink all (like using (3,ID) for all linked records)
    (6, 0, [IDs])          replace the list of linked IDs (like using (5) then (4,ID) for each ID in the list of IDs)
    

    2023-02-06 11:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有