javascriptodooodoo-11odoo-view

How can i open a form always in Edit mode , for a particular model


I have a model say 'my.attendance' , also have a form view for this which contains some attendance details.What i need is when i open this form view it should always open in Edit mode.So i can directly enter the attendance without clicking Edit button each time.


Solution

  • You have to extend the ViewManager to achieve this.

    odoo.define('my_module.view_manager', function (require) {
    "use strict";
    
    var ViewManager = require('web.ViewManager');
    
    ViewManager.include({
    
        custom_events: {
    
            execute_action: function(event) {
                var data = event.data;
                this.do_execute_action(data.action_data, data.env, data.on_closed)
                    .then(data.on_success, data.on_fail);
            },
            search: function(event) {
                var d = event.data;
                _.extend(this.env, this._process_search_data(d.domains, d.contexts, d.groupbys));
                this.active_view.controller.reload(_.extend({offset: 0}, this.env));
            },
            switch_view: function(event) {
                if ('res_id' in event.data) {
                    this.env.currentId = event.data.res_id;
                }
                var options = {};
                console.log(event.data)
                if (event.data.view_type === 'form' && !this.env.currentId) {
                    options.mode = 'edit';
                } else if (event.data.mode) {
                    options.mode = event.data.mode;
                }
    
                // Extra added code
                if (event.data.model){    
                    if (event.data.model == 'my.model'){  // Checking the particular model.
                        options.mode = 'edit';
                    }
                }
    
    
                this.switch_mode(event.data.view_type, options);
            },
            env_updated: function(event) {
                _.extend(this.env, event.data);
            },
            push_state: function(event) {
                this.do_push_state(event.data);
            },
            get_controller_context: '_onGetControllerContext',
            switch_to_previous_view: '_onSwitchToPreviousView',
        },
    
     });
    });