Odoo Help


How to override save & new button functionality ?

on 1/21/16, 1:28 AM 3,210 views

I would like to override the default save & new button functionality ?

the button view is located at web\static\src\xml\base.xml and button click functionality is web\static\src\js\view_form.js.

i manged to override view by adding new xml file at mymodule\static\src\xml\custom.xml

<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="AbstractFormPopup.buttons">
    <t t-if="! readonly">
        <t t-if="! multi_select">
            <button type="button" class="oe_button oe_abstractformpopup-form-save oe_highlight">Save</button>
        <t t-if="multi_select">
            <button type="button" class="oe_button oe_abstractformpopup-form-save oe_highlight">Save &amp; Close</button>
            <button type="button" class="oe_button oe_abstractformpopup-form-save-new oe_highlight">My Own Button</button>
    <a class="oe_abstractformpopup-form-close oe_bold oe_form_button_cancel" href="javascript:void(0)">
        <t t-if="! readonly">
        <t t-if="readonly">

and adding

'qweb': [

in _openerp_.py

now button name is changed but the functionality is default functionality. how can i change that default button functionality ?


Axel Mendoza

--Axel Mendoza--
| 7 8 8
Camaguey, Cuba
--Axel Mendoza--

DevOps - Full stack - Software Architect - Developer - Technology Integrator

I could help you to develop anything and solve complex problems based on technologies, integrations and tricky stuffs mostly in Python with OpenERP/Odoo, Zato, Django and many others frameworks programming languages and technologies.

I offers consulting services to anyone with an unanswered questions or needs for customizations. Think about it, maybe it's better to have an expert to solve your issues and projects than having a full-time employee trying to understand what to do and how

Reach me at aekroft@gmail.com

Axel Mendoza
On 1/21/16, 2:27 AM

To do that you need to add this code in a loaded js file of your module defined in the backend assets template(search others posts for that), changing the code in bold for your needs


setup_form_view: function() {

var self = this;

if (this.row_id) {

this.dataset.ids = [this.row_id];

this.dataset.index = 0;

} else {

this.dataset.index = null;


var options = _.clone(self.options.form_view_options) || {};

if (this.row_id !== null) {

options.initial_mode = this.options.readonly ? "view" : "edit";


_.extend(options, {

$buttons: this.$buttonpane,


this.view_form = new instance.web.FormView(this, this.dataset, this.options.view_id || false, options);

if (this.options.alternative_form_view) {




this.view_form.on("form_view_loaded", self, function() {

var multi_select = self.row_id === null && ! self.options.disable_multiple_selection;

self.$buttonpane.html(QWeb.render("AbstractFormPopup.buttons", {

multi_select: multi_select,

readonly: self.row_id !== null && self.options.readonly,


var $snbutton = self.$buttonpane.find(".oe_abstractformpopup-form-save-new");

$snbutton.click(function() {


$.when(self.view_form.save()).done(function() {

self.view_form.reload_mutex.exec(function() {





var $sbutton = self.$buttonpane.find(".oe_abstractformpopup-form-save");

$sbutton.click(function() {

$.when(self.view_form.save()).done(function() {

self.view_form.reload_mutex.exec(function() {





var $cbutton = self.$buttonpane.find(".oe_abstractformpopup-form-close");

$cbutton.click(function() {








to what you need

Thanks for the reply Axel, is it enough to add above part of the code in the local module js ? or do i need to add remaining js content from the view_form.js (which is located at web/static/js folder).

on 1/21/16, 4:56 AM

I don't understand. You need to put that code in a js file that contains the odoo js declaration header and that file it's declared using template asset declaration. No need for add extra content from view_form.js

Axel Mendoza
on 1/21/16, 8:57 AM

Hi Axel, i did that, now i need to call a python method from the js by passing the arguments (cr,ids,uid etc...). i am able to call a plane method but unable to send these argument related to the form. do u have any idea?

on 1/21/16, 10:42 AM

That is another question that you could find the answer in so many others post in the forum, don't mess up the question objetive

Axel Mendoza
on 1/21/16, 10:49 AM

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

1 follower(s)


Asked: 1/21/16, 1:28 AM
Seen: 3210 times
Last updated: 1/21/16, 2:27 AM