Cómo crear una relación One2Many con un campo relacionado

2,179 views
Skip to first unread message

Iniciado

unread,
Apr 18, 2018, 1:43:40 PM4/18/18
to Usuarios Odoo / OpenERP en España
Hola, estoy intentando crear una relación One2many en la que no llamo al campo One2many directamente, sino que quiero que se relacione sólo y directamente introducir los valores en los campos relacionados.

¿cómo puedo hacer para que se asignen directamente la relación? Gracias.

He visto que tal y como está, si creo por medio de un campo one2many y asigno el producto manualmente, se crea la bd y puedo incluso cambiar los valores relacionados correctamente. Pero no sé como hacer que cuando se elija área, se cree automáticamente esa relación.

python

class ProductTemplate(models.Model):
_inherit = 'product.template'

sale_price_type = fields.Selection([
('area', 'Area')],
string='Sale Price Type',
required=True,
default='standard',
)

sale_prices_area = fields.One2many('product.prices_area',
'sale_area_tmpl_id',
string="Sale Prices Area")

"""
No quiero que se creen los campos en la tabla product_template
por esto de este campo relativo
"""
min_width = fields.Float(related='sale_prices_area.min_width')



class ProductPricesArea(models.Model):
_name = 'product.prices_area'

min_width = fields.Float(string="Min. Width", default=0.0,
digits=dp.get_precision('Product Price'))

sale_area_tmpl_id = fields.Many2one('product.template', 'Product Template')


xml

<?xml version="1.0"?>
<odoo>
<record id="view_product_template_form_price_type" model="ir.ui.view">
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<field name="arch" type="xml">

<xpath expr="//field[@name='list_price']" position="before">
<label for="sale_price_type"/>
<div>
<field name="sale_price_type"/>
</div>
</xpath>
</field>
</record>

<record id="view_product_template_form" model="ir.ui.view">
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_only_form_view"/>
<field name="arch" type="xml">

<xpath expr="//notebook/page[1]" position="after">
<page string="Sale Price Type">
<group>
<field name="min_width"/>
</group>
</page>
</xpath>
</field>
</record>
</odoo>

Iniciado

unread,
Apr 19, 2018, 2:51:57 PM4/19/18
to Usuarios Odoo / OpenERP en España
class ProductTemplate(models.Model):
_inherit = 'product.template'

sale_price_type = fields.Selection([
('area', 'Area')],
string='Sale Price Type',
required=True,
default='standard',
)

sale_prices_area = fields.One2many('product.prices_area',
'sale_area_tmpl_id',
string="Sale Prices Area")

"""
No quiero que se creen los campos en la tabla product_template
por esto de este campo relativo
"""
min_width = fields.Float(related='sale_prices_area.min_width')

    @api.onchange('sale_price_type')
def create_relation(self):
self.ensure_one()
if self.sale_price_type == 'area':
self.write({'sale_prices_area': "aquí es donde me he quedado"})


class ProductPricesArea(models.Model):
_name =
'product.prices_area'

min_width = fields.Float(string="Min. Width", default=0.0,
digits=dp.get_precision('Product Price'))

sale_area_tmpl_id = fields.Many2one(
'product.template', 'Product Template')

Iniciado

unread,
Apr 20, 2018, 12:11:27 PM4/20/18
to Usuarios Odoo / OpenERP en España
¿Alguien me puede dar una pista de como crear el registro?

Muchas gracias.

cubells

unread,
Apr 21, 2018, 3:12:51 AM4/21/18
to openerp-s...@googlegroups.com
El 20/4/18 a les 18:11, Iniciado ha escrit:
> ¿Alguien me puede dar una pista de como crear el registro?
>

Puedes explicar mejor esto que dices? No lo entiendo. Y si no lo
entiendo y encima tengo poco tiempo, inmediatamente descarto ayudarte".

"estoy intentando crear una relación One2many en la que no llamo al
campo One2many directamente, sino que quiero que se relacione sólo y
directamente introducir los valores en los campos relacionados.

¿cómo puedo hacer para que se asignen directamente la relación?"

Qué quiere decir "no llamo al campo One2many directamente"??

Qué quiere decir "se relacione solo"?

Qué quiere decir "introducir los valores en los campos relacionados"?


https://sindominio.net/ayuda/preguntas-inteligentes.html



--
Atentament, cubells.
--

Iniciado

unread,
Apr 21, 2018, 4:02:17 AM4/21/18
to Usuarios Odoo / OpenERP en España
Muchas gracias Cubells, eres, como siempre, mi salvación...

A ver si me puedo explicar correctamente...

Simplificando, es crear un registro nuevo al one2many con el onchange. Para poder poner los datos en los campos relacionados y que se almacene en el one2many.

He puesto todo el código simplificado, sólo a falta de la creación del registro... que estoy probando y probando, pero nada...

lo ultimo que he probado es esto:

@api.onchange('sale_price_type')
def create_relation(self):
    if self.sale_price_type == 'area':
record_id = self.env['product.template'].browse(self._context.get('active_id'))
try:
record_id.write([(4, record_id.sale_prices_area.id, None)])
except:
raise UserError(_('Invalid file format!)'))
return {}

y esto...

@api.onchange('sale_price_type')
def create_relation(self):
self.ensure_one()
    val1 = {'min_width': 0.0}
if self.sale_price_type == 'area':
self.env['product.template'].write([(0, None, val1)])

pero nada...

Muchas gracias de nuevo...

cubells

unread,
Apr 21, 2018, 4:13:32 AM4/21/18
to openerp-s...@googlegroups.com
El 21/4/18 a les 10:02, Iniciado ha escrit:
> Muchas gracias Cubells, eres, como siempre, mi salvación...
>
> A ver si me puedo explicar correctamente...
>
> Simplificando, es crear un registro nuevo al one2many con el onchange.
> Para poder poner los datos en los campos relacionados y que se almacene
> en el one2many.


No puedes crear con un onchange.

utiliza un depends en ese caso, por ejemplo.

https://www.odoo.com/documentation/10.0/reference/orm.html


--
Atentament, cubells.
--

Iniciado

unread,
Apr 22, 2018, 5:13:27 PM4/22/18
to Usuarios Odoo / OpenERP en España
Hola Cubells, efectivamente, culpa del onchange...

la verdad, que da un montón de problemas el onchange... también tuve problemas con un readonly puñetero...

¿cómo puedo crear un depends a un Selection? me lo crea todo como quiero con un botón, pero yo quiero que lo haga al seleccionar una opción del selection...

¿alguna idea?

Iniciado

unread,
Apr 23, 2018, 2:20:12 PM4/23/18
to Usuarios Odoo / OpenERP en España
Buenas, por fin lo conseguí...

finalmente con un depends no había manera tampoco... pero ha funcionado perfectamente con un constrains.

class ProductTemplate(models.Model):
_inherit = 'product.template'

sale_price_type = fields.Selection([
('area', 'Area')],
string='Sale Price Type',
required=True,
default='standard',
)

sale_prices_area = fields.One2many('product.prices_area',
'sale_area_tmpl_id',
string="Sale Prices Area")

"""
No quiero que se creen los campos en la tabla product_template
por esto de este campo relativo
"""
min_width = fields.Float(related='sale_prices_area.min_width')

    @api.constrains('sale_price_type')
def create_relation(self):
self.ensure_one()
        column = {'min_width': self.min_width}
if self.sale_price_type == 'area':
self.write({'sale_prices_area': [(0, None, column)]})
            return {}


class ProductPricesArea(models.Model):
_name =
'product.prices_area'

min_width = fields.Float(string="Min. Width", default=0.0,
digits=dp.get_precision('Product Price'))

sale_area_tmpl_id = fields.Many2one(
'product.template', 'Product Template')

El código el mas largo, pero lo he simplificado para mostrar el problema...

Muchas gracias.
Reply all
Reply to author
Forward
0 new messages