This question has been flagged
2 Replies
5764 Views

Hello I'm making a module ( I'm newbie on odoo),  i want add or delete fields depending if a checkbox field value is yes or no, i have this code on my model:

# -*- coding: utf-8 -*-

from odoo import models, fields, api
import time
import requests

class Modulo2(models.Model):
_name = 'modulo2.modulo2'
urlApi = 'http://localhost:8000/api/persons/'
actualYear = time.strftime('%Y')
newPerson = fields.Selection([('yes', 'Yes'), ('no', 'No')], string='Nueva Persona (Si/No)')

if newPerson == 'yes':
nombre = fields.Char(string="Nombre", required=True)
else:
nombre = fields.Char(string="Nombre", required=True)
anioNacimiento = fields.Integer(string="Año de Nacimiento", compute="_obtener_datos", store=True)
edad = fields.Integer(compute="_calcular_edad", store=True)

@api.depends('nombre')
def _obtener_datos(self):
response = requests.get(str(self.urlApi) + str(self.nombre))
if response.text != "not found":
self.anioNacimiento = response.json()['year']

@api.depends('anioNacimiento')
def _calcular_edad(self):
self.edad = int(self.actualYear) - int(self.anioNacimiento)


But this doesn't work, any idea? i use odoo 10 community version, ( sorry for my bad english ), thanks !




Avatar
Discard
Author Best Answer

Hello, I do not understand much about the xml this is my xml file,


<odoo>
<data>
<!-- explicit list view definition -->
<record model="ir.ui.view" id="modulo2.list">
<field name="name">modulo2 list</field>
<field name="model">modulo2.modulo2</field>
<field name="view_mode">tree,form</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
<field name="anioNacimiento"/>
<field name="edad"/>
</tree>
<form>
<sheet string="modulo2.modulo2">
<group col="4">
<field name="edad" modifiers="{'readonly': true}"/>
<field name="name" on_change="1" modifiers="{}"/>
<field name="anioNacimiento" on_change="1" modifiers="{'readonly': true}"/>
<field name="newPerson" modifiers="{}" invisible="1"/>
<separator/>
</group>
</sheet>
</form>
</field>
</record>


<!-- actions opening views on models -->

<record model="ir.actions.act_window" id="modulo2.action_window">
<field name="name">modulo2 prueba </field>
<field name="res_model">modulo2.modulo2</field>
<field name="view_mode">tree,form</field>
</record>


<!-- server action to the one above -->



<!-- Top menu item -->

<menuitem name="modulo2" id="modulo2.menu_root"/>

<!-- menu categories -->

<menuitem name="Menu" id="modulo2.menu_1" parent="modulo2.menu_root"/>

<!-- actions -->

<menuitem name="Personas" id="modulo2.menu_1_list" parent="modulo2.menu_1"
action="modulo2.action_window"/>
</data>
</odoo>


which part should I modify ?, I would also like to edit the form that appears when the button is given to create, but I have not managed to do it, I have tried many forms, but I do not finish achieve it, if you could help me it would be great, thank you very much

Avatar
Discard

<field name="newPerson"/>

<field name="nombre" attrs="{'invisible':[('newPerson', '=', 'no')], 'required':[('newPerson', '=', 'yes')]}" />

Best Answer

Just declare the field in the .py file and use attrs in the xml file

like

newPerson = fields.Selection([('yes', 'Yes'), ('no', 'No')], string='Nueva Persona (Si/No)')
nombre = fields.Char(string="Nombre")

instead of


newPerson = fields.Selection([('yes', 'Yes'), ('no', 'No')], string='Nueva Persona (Si/No)')

if newPerson == 'yes':
nombre = fields.Char(string="Nombre")
else:
nombre = fields.Char(string="Nombre", required=True)

and in your xml file, when you declare your filed nombre, use attrs like


<field name="nombre" attrs="{'invisible':[('newPerson', '=', 'no')], 'required':[('newPerson', '=', 'yes')]}" />

 

Avatar
Discard