Python 在OpenERP 7中单击按钮时关闭向导
我在OpenERP 7中打开向导的“从”按钮。但是,当单击向导的按钮Compute时,我的向导已关闭,但我不想在单击向导的按钮Compute时关闭向导,而不是在单击向导的按钮close时关闭向导。 我正在使用Openerp7Python 在OpenERP 7中单击按钮时关闭向导,python,openerp,odoo,Python,Openerp,Odoo,我在OpenERP 7中打开向导的“从”按钮。但是,当单击向导的按钮Compute时,我的向导已关闭,但我不想在单击向导的按钮Compute时关闭向导,而不是在单击向导的按钮close时关闭向导。 我正在使用Openerp7 class test_pass_student(osv.osv_memory): _name = 'test.pass.student' _column ={ 'pass_id': fields.many2one('pass.studen
class test_pass_student(osv.osv_memory):
_name = 'test.pass.student'
_column ={
'pass_id': fields.many2one('pass.student', 'Passed'),
'student_id':fields.many2one('student.student', 'Student'),
}
test_pass_student()
def _reopen(self, res_id, model):
return {'type': 'ir.actions.act_window',
'view_mode': 'form',
'view_type': 'form',
'res_id': res_id,
'res_model': self._name,
'target': 'new',
'context': {
'default_model': model,
},
}
class pass_student(osv.osv_memory):
_name = 'pass.student'
_columns = {
'student_id':fields.many2one('student.student', 'Student'),
'lines': fields.one2many('test.pass.student','pass_id', 'Passed students'),
}
def add_student(self, cr, uid, ids,context=None):
lines_obj = self.pool.get('test.pass.student')
for record in self.browse(cr,uid,ids,context):
for line in record.student_id.scores:
if line.pass_score > 50:
lines_obj.create(cr,uid,{'pass_id': record.id,'student_id':line.student_id.id})
return _reopen(self, record.id, record._model)
pass_student()
Shen S选择first student check(第一个学生检查),如果他/她的分数大于50,则添加到one2many中,然后再次检查另一个学生,同样的事情会再次重复。自OpenERP 6.1起(因此在7.0中)向导按钮的默认行为(带有
type=“object
)是立即关闭向导弹出窗口。按钮调用的方法可以返回将要执行的操作定义字典。
当您不希望向导关闭时,通常是因为您有多个步骤。由于多步骤向导通常有不同的表单视图,因此它们的按钮方法只返回操作,以使用下一步的视图打开同一向导记录(如果需要再次显示,也可以是同一视图)
您可以在官方插件源代码中找到示例,例如在mail.compose.message
向导中,该向导使用类似的技巧重新打开自身
这和这可能还包含有用的示例。无需编写单独的方法来再次打开向导。您只需获取对象引用并将其与视图id一起返回即可。例如
def add_student(self, cr, uid, ids,context=None):
model_data_obj = self.pool.get('ir.model.data')
lines_obj = self.pool.get('test.pass.student')
for record in self.browse(cr,uid,ids,context):
for line in record.student_id.scores:
if line.pass_score > 50:
lines_obj.create(cr,uid,{'pass_id': record.id,'student_id':line.student_id.id})
view_rec = model_data_obj.get_object_reference(cr, uid, 'pass_student', 'add_student_form_view_id')
view_id = view_rec and view_rec[1] or False
return {
'view_type': 'form',
'view_id' : [view_id],
'view_mode': 'form',
'res_model': 'pass.student',
'type': 'ir.actions.act_window',
'target': 'new',
'context': context
}
希望它能对您有所帮助!我回答自己,在向导中,如果我放置button-type对象而不是button-type工作流,则触发wf工作(无关闭),但这是正确的路径吗 如果有人需要,这是我的对象按钮事件代码(用于我的picking.import.wizard向导):
要在按钮上关闭向导,请单击“在视图表单xml上添加此代码”:
<button string="Cancel" class="oe_link" special="cancel"/>
感谢您宝贵的回复。但当我使用相同的技巧时,它会给我一个错误弹出窗口,服务器遇到内部错误,无法完成您的请求。要么服务器过载,要么应用程序和终端出现错误**TypeError:------不可JSON序列化**@user1576199:在该点t你应该编辑你的问题,并准确地解释你做了什么(包括你写的代码),否则很难帮助你;-)我编辑了这个问题。希望这对你有帮助,很抱歉我的英语和解释不好:(但是当我按照你说的那样做时,向导上的数据会丢失。我不想丢失当前向导的数据。谢谢你更新这个问题,但是你的问题仍然不是很清楚。你能在问题中清楚地提到你从这个代码中看到了什么以及你期望的是什么吗?到目前为止,你的代码看起来还不错。你可能不需要内容xt
和默认\u model
部分在\u重新打开
(这是邮件合成向导所需要的,但不在这里),但它不应该引起问题。也许您可以显示您正在使用的XML视图的源代码,以及出现问题时日志的较大摘录(这比只显示错误消息要好)我认为这个问题应该被命名为“在openerp 7中单击按钮时不关闭向导”,因为这正是您想要的。
<button string="Cancel" class="oe_link" special="cancel"/>