Odoo Help


Manually create/delete lines in a form in a one to many field (Survey module)

Mauricio Leon
on 5/10/16, 2:15 PM 1,010 views

I'm trying to create a line in a one to many field every time a checkbox button is clicked.

I added this button to the survey form view (from the Survey module) called nominative

The model is as folows

class survey_survey(models.Model):
    _inherit = 'survey.survey'
    nominative = fields.Boolean(string="Nominative survey", default=False)

And this is the view

<record id="survey.survey_form2" model="ir.ui.view" >
    <field name="name">survey_form2</field>
    <field name="model">survey.survey</field>
    <field name="inherit_id" ref="survey.survey_form"/>
        <field name="arch" type="xml">
            <field name="quizz_mode" position="after">
            <field name="nominative" />

What I want to happen is that every time the "Nominative" checkbox is selected, a page with some questions gets loaded in the form, and every time the checkbox is unselected, that page gets popped out of the list of pages in the form.

Right now my nearest approach to do this is by creating a new object and append it to the page_id collection


def _toogle_extra_page(self):

    cr = self.env.cr
    uid = self.env.uid
    page_obj = self.pool.get('survey.page')
    page = page_obj.create(cr,uid,{
        "survey_id": self.id,
        "name": "Extra Page",
        "title": "Extra Page"
    }, context=None)


But when I hit the checkbox, the "self.id" value is set to "NULL" in the SQL command

INSERT INTO "survey_page" ("id", "survey_id", "sequence", "title", "create_uid", "write_uid", "create_date", "write_date") VALUES(nextval('survey_page_id_seq'), NULL, 10, 'Pagina de Contacto', 1, 1, (now() at time zone 'UTC'), (now() at time zone 'UTC')) RETURNING id

 And also it is not showing in the form view as "Extra Page"

How can I manually insert/remove pages when that specific event occurs?

Mauricio Leon
On 5/16/16, 2:00 PM

I have managed to add a new element to the list of pages with the following code

def _toogle_info_page(self):
    cr = self.env.cr
    uid = self.env.uid
    pages = []
        "name":"Contact Page",
        "title":"Contact Page",
        "sequence": 1,
        "description": "Contact info Page"

    self.update({"page_ids": pages})

With this I was able to update the list of pages I had in my survey, but it removed all previous pages inserted. So, in order to solve this, I used the following code

def _toogle_info_page(self):
    page = self.env['survey.page'].new({
        "name":"Contact Page",
"title":"Contact Page",
"sequence": 1,
"description": "Contact info for tracking"

    self.page_ids += page

With this, I don´t need to know the current survey ID to insert a new page in the list of pages.

I still can´t get the questions inside the pages though (no method described above worked), but I´ll open a new thread on the blog for this doubt.

Hope it helps.

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: 5/10/16, 2:15 PM
Seen: 1010 times
Last updated: 5/16/16, 2:00 PM