Hello I am trying to get a one2one relationship to work. Here are my classes:
class Formulario(ModelSQL,ModelView):
'Formulario'
_name = 'cefiro.formulario'
_description = __doc__
formVivTrabajo = fields.One2One('cefiro.formvivtrabajo','formularioid','formvivtrabajoid','Vivienda y Trabajo', required=True)
Formulario()
class Formvivtrabtarget(ModelSQL,ModelView):
'Formvivtrabtarget'
_name = 'cefiro.formvivtrabtarget.target'
_description = __doc__
tipoVivienda = fields.Selection([('casa','La casa'),('calle','La calle'),('inst',u'Institución protectora'),('car','Privado de libertad')],'Vive en',required=True)
Formvivtrabtarget()
class Formviviendatrabajo(ModelSQL,ModelView):
'Formvivtrabajo'
_name = 'cefiro.formvivtrabajo'
_description = __doc__
formvivtrabajoid = fields.Many2One('cefiro.formvivtrabtarget.target', 'Formvivtrabtarget')
formularioid = fields.Many2One('cefiro.formulario', 'Formulario')
def __init__(self):
super(Formviviendatrabajo, self).__init__()
self._sql_constraints += [
('origin_unique', 'UNIQUE(formularioid)','Origin must be unique'),
('target_unique', 'UNIQUE(formvivtrabajoid)','Target must be unique'),
]
Formviviendatrabajo()
You can see that I already have formvivtrabjoid as a Formviviendatrabajo's field but I am getting the following error when saving it:
Traceback (most recent call last):
File "/trytond/protocols/jsonrpc.py", line 123, in _marshaled_dispatch
response['result'] = dispatch_method(method, params)
File "/trytond/protocols/jsonrpc.py", line 156, in _dispatch
res = dispatch(*args)
File "/trytond/protocols/dispatcher.py", line 156, in dispatch
res = getattr(obj, method)(*args_without_context, **kargs)
File "/trytond/model/modelsql.py", line 925, in write
self._columns[field].set(ids, self, field, values[field])
File "/trytond/model/fields/one2many.py", line 130, in set
model.create(act[1])
File "/trytond/model/modelsql.py", line 423, in create
self._validate([id_new])
File "/trytond/model/modelsql.py", line 2207, in _validate
super(ModelSQL, self)._validate(ids)
File "/trytond/model/modelstorage.py", line 1090, in _validate
if (isinstance(record[field_name], (BrowseRecordNull,
File "/trytond/model/browse.py", line 174, in __getitem__
for data in self._model.read(ids, ffields.keys()):
File "/trytond/model/modelsql.py", line 622, in read
res2 = self._columns[field].get(ids, self, field, values=res)
File "/trytond/model/fields/one2one.py", line 24, in get
res = super(One2One, self).get(ids, model, name, values=values)
File "/trytond/model/fields/many2many.py", line 78, in get
], order=order))
File "/trytond/model/modelsql.py", line 1168, in search
order_by2, tables2, tables2_args = self._order_calc(field, otype)
File "/trytond/model/modelsql.py", line 2058, in _order_calc
(field, self._name))
Exception: ('Error', 'Wrong field name (formvivtrabajoid) for cefiro.formvivtrabajo in order!')
I based on the following links but didn't work as you can see:
[1]
http://doc.tryton.org/2.0/trytond/doc/ref/models/fields.html#one2one,
[2]
http://hg.tryton.org/trytond/file/14a0a4d4e03b/trytond/test/test.py#l359 [3]
http://hg.tryton.org/trytond/file/14a0a4d4e03b/trytond/tests/test_fields.py#l2083Thank you in advance