“向导中的助手操作”的版本间的差异

来自Odoo大V社-odoo中文开发手册
跳转至: 导航搜索
 
(未显示3个用户的5个中间版本)
第1行: 第1行:
现在,假设我们想要一个按钮来自动挑选所有的任务,让用户一个接一个地挑选它们。这就是在表单中获取所有按钮的要点。该按钮背后的代码将获得一个记录集,其中包含所有活动的任务,并将其分配给多对多字段中的任务。
+
现在,假设我们想要一个按钮来自动挑选所有的任务,让用户一个接一个地挑选它们。这就是在表单中Get All按钮的要点。该按钮背后的代码将获得一个记录集,其中包含所有活动的任务,并将其分配给多对多字段中的任务。
 +
 
 
但这里有个问题。在对话框窗口中,当按下一个按钮时,向导窗口会自动关闭。我们没有使用Count按钮来面对这个问题,因为它使用一个异常来显示它的消息;因此,该操作不成功,窗口没有关闭。
 
但这里有个问题。在对话框窗口中,当按下一个按钮时,向导窗口会自动关闭。我们没有使用Count按钮来面对这个问题,因为它使用一个异常来显示它的消息;因此,该操作不成功,窗口没有关闭。
幸运的是,我们可以通过请求客户机重新打开相同的向导来解决这个问题。模型方法可以返回由web客户端执行的窗口操作,以dictionary对象的形式执行。该字典使用与XML文件中定义窗口操作相同的属性。
 
我们将为窗口操作字典定义一个helper函数,以重新打开向导窗口,以便可以在几个按钮中轻松地重复使用它:
 
  
 +
幸运的是,我们可以通过请求客户机重新打开相同的向导来解决这个问题。模型方法可以返回由web客户端执行的窗口操作,在字典对象形式下执行。该字典使用与XML文件中定义窗口操作相同的属性。
 +
 +
我们将为窗口操作字典定义一个helper函数,以重新打开向导窗口,以便可以在几个按钮中轻松地重复使用它:︰
 
@api.multi
 
@api.multi
 +
 +
<nowiki>@api.multi
 
def _reopen_form(self):
 
def _reopen_form(self):
 
     self.ensure_one()
 
     self.ensure_one()
第14行: 第18行:
 
         'view_mode': 'form',
 
         'view_mode': 'form',
 
         'target': 'new'}
 
         'target': 'new'}
 
+
</nowiki>
  
  
第20行: 第24行:
 
值得注意的是,窗口操作可能是其他的东西,比如跳转到不同的向导表单来请求额外的用户输入,这可以用于实现多页面向导。
 
值得注意的是,窗口操作可能是其他的东西,比如跳转到不同的向导表单来请求额外的用户输入,这可以用于实现多页面向导。
 
现在,Get All按钮可以完成它的工作,并且仍然让用户在同一个向导中工作︰
 
现在,Get All按钮可以完成它的工作,并且仍然让用户在同一个向导中工作︰
 
+
<nowiki>
 
@api.multi  
 
@api.multi  
 
def do_populate_tasks(self):     
 
def do_populate_tasks(self):     
 
     self.ensure_one()             
 
     self.ensure_one()             
 
     Task = self.env['todo.task']
 
     Task = self.env['todo.task']
     open_tasks = Task.search([('is_done', '=', False)])     
+
     all_tasks = Task.search([('is_done', '=', False)])     
 
     # Fill the wizard Task list with all tasks     
 
     # Fill the wizard Task list with all tasks     
 
     self.task_ids = all_tasks  
 
     self.task_ids = all_tasks  
 
     # reopen wizard form on same wizard record  
 
     # reopen wizard form on same wizard record  
 
     return self._reopen_form()  
 
     return self._reopen_form()  
 +
</nowiki>
 +
 
在这里,我们可以看到如何使用任何其他可用的模型:我们首先使用self.env[]获得对模型的引用,在这种情况下todo.task,然后可以对其执行操作,比如search(),以检索满足某些搜索条件的记录。
 
在这里,我们可以看到如何使用任何其他可用的模型:我们首先使用self.env[]获得对模型的引用,在这种情况下todo.task,然后可以对其执行操作,比如search(),以检索满足某些搜索条件的记录。
 
瞬态模型将值存储在向导表单字段中,可以像其他模型一样读取或写入。将all_tasks变量分配给模型task_ids一对多字段。正如您所看到的,这就像我们对任何其他字段类型所做的那样。
 
瞬态模型将值存储在向导表单字段中,可以像其他模型一样读取或写入。将all_tasks变量分配给模型task_ids一对多字段。正如您所看到的,这就像我们对任何其他字段类型所做的那样。
 +
 +
上一节:[[抛出异常]]  下一节:[[使用ORM API]]

2018年5月8日 (二) 10:56的最新版本

现在,假设我们想要一个按钮来自动挑选所有的任务,让用户一个接一个地挑选它们。这就是在表单中Get All按钮的要点。该按钮背后的代码将获得一个记录集,其中包含所有活动的任务,并将其分配给多对多字段中的任务。

但这里有个问题。在对话框窗口中,当按下一个按钮时,向导窗口会自动关闭。我们没有使用Count按钮来面对这个问题,因为它使用一个异常来显示它的消息;因此,该操作不成功,窗口没有关闭。

幸运的是,我们可以通过请求客户机重新打开相同的向导来解决这个问题。模型方法可以返回由web客户端执行的窗口操作,在字典对象形式下执行。该字典使用与XML文件中定义窗口操作相同的属性。

我们将为窗口操作字典定义一个helper函数,以重新打开向导窗口,以便可以在几个按钮中轻松地重复使用它:︰ @api.multi

@api.multi
def _reopen_form(self):
    self.ensure_one()
    return {
        'type': 'ir.actions.act_window',
        'res_model': self._name,  # this model
        'res_id': self.id,  # the current wizard record
        'view_type': 'form',
        'view_mode': 'form',
        'target': 'new'}
 


值得注意的是,窗口操作可能是其他的东西,比如跳转到不同的向导表单来请求额外的用户输入,这可以用于实现多页面向导。 现在,Get All按钮可以完成它的工作,并且仍然让用户在同一个向导中工作︰

@api.multi 
def do_populate_tasks(self):     
    self.ensure_one()             
    Task = self.env['todo.task']
    all_tasks = Task.search([('is_done', '=', False)])     
    # Fill the wizard Task list with all tasks     
    self.task_ids = all_tasks 
    # reopen wizard form on same wizard record 
    return self._reopen_form() 
 

在这里,我们可以看到如何使用任何其他可用的模型:我们首先使用self.env[]获得对模型的引用,在这种情况下todo.task,然后可以对其执行操作,比如search(),以检索满足某些搜索条件的记录。 瞬态模型将值存储在向导表单字段中,可以像其他模型一样读取或写入。将all_tasks变量分配给模型task_ids一对多字段。正如您所看到的,这就像我们对任何其他字段类型所做的那样。

上一节:抛出异常 下一节:使用ORM API