¿Cómo puedo cambiar las opciones en un campo de selección OpenERP basado en otros valores de campo?

Tengo un formulario con cuatro campos:

  • Cultivo – Selección
  • Fecha activa
  • Fecha activa
  • Área de bloques – selección

¿Cómo puedo hacer que las opciones disponibles en Área de Bloque dependan de los valores que el usuario selecciona para los otros campos?

No sé si puede hacerlo con un campo de selección, pero puede cambiar el dominio de un campo de muchos a uno cuando otro campo cambia de valor. También puede usar los otros campos en el dominio de su campo BlockArea y no tener que cambiarlo en absoluto. Mire la forma en que la pantalla de la dirección del socio establece el dominio para el campo state_id. Puede que encuentre útil esta pregunta relacionada .

Si necesita cambiar el dominio cuando cambia otro campo, entonces el evento on_change puede incluir una entrada de domain en el diccionario que devuelve.

Encontré un hilo de discusión que dice que puede usar el widget de selección en un campo de muchos a uno, por lo que podría funcionar para usted si establece un domain para el campo. No lo he probado yo mismo.

Para limitar las opciones disponibles basadas en otros valores de campo, puede usar el domain . Como ejemplo, esto se usa en el módulo estándar project_issue :

Citando las líneas relevantes:

 class project_issue(crm.crm_case, osv.osv): _columns = { 'project_id':fields.many2one('project.project', 'Project'), 'type_id': fields.many2one ('project.task.type', 'Stages', domain="[('project_ids', '=', project_id)]"), } 

En este ejemplo, las opciones disponibles de type_id obtienen de la tabla project.task.type , dependiendo del valor del campo project_id .

Prueba la función on_change … crea una función on_change y al final de la función devuelve la condición de dominio para el campo block_area, por ejemplo

 def onchange_for_block_area(self,cr,uid,ids,crop,from_date,to_date,context): domain=[] # #some statements for finding the domain # return {'domain':{'block_area': domain}} 

proporcione la función onchange en los campos recorte, fecha y fecha y fecha