I have a module to control a bus fleet with several models. Two of them are Lines and Buses .
I have a type one2many relationship (one2many bus lines and the corresponding line number2one to buses) .
The problem is that the many2one in lines called autobus_id
that goes to bus does not detect it and tells me that it does not exist.
If you notice it is written the same:
The error is: KeyError: 'autobus_id'
Does anyone tell me why this happens?
Here I leave the code of Buses :
class autobus(osv.osv):
_name = 'Autobus'
_rec_name = 'matricula'
_sql_constraints = [
('matricula_uniq', 'unique (matricula)', ('La matrícula debe ser única')),
]
def precio(self, cr, uid, ids, field_name, arg, context=None):
records = self.browse(cr, uid, ids)
precio = 1.20
res = {}
for r in records:
if r.tipo == 'DP':
res[r.id] = precio + 0.50
elif r.tipo == 'UP':
res[r.id] = precio
elif r.tipo == 'M':
res[r.id] = precio - 0.50
return res
_columns = {
'matricula' : fields.char(
string='Matrícula',
required=True,
size=15
),
'marca' : fields.char(
string='Marca'
),
'modelo' : fields.char(
string='modelo'
),
'tipo' : fields.selection(
(('UP','Una planta'),
('DP',' Dos plantas'),
('M','Minuvalidos')),
string="Tipo de autobus",
required=True
),
'n_place' : fields.integer(
'Numero de plazas'
),
'precio': fields.function(
precio,
type = 'float',
string='Precio',
readonly=True,
help='Campo calculado a traves de un método. Según el tipo de autobus tendrá un precio distinto.'
),
'image_medium' : fields.binary(
string='Imagen'
),
'motor' : fields.char(
string='Motor'
),
'consume' : fields.integer(
'Consumo (a los cien)'
),
'job_sunday' : fields.boolean(
string='¿Trabaja los sábados?'
),
'conductor_id' : fields.many2one(
'conductor',
string='Conductor'
),
'linea_ids' : fields.one2many(
'linea',
'autobus_id',
'Lineas'
)
}
autobus()
And here the one of lines :
class linea(osv.osv):
_name = 'Lineas'
_rec_name = 'n_linea'
_sql_constraints = [
('nlinea_uniq', 'unique (n_linea)', ('No puede haber dos lineas con el mismo número'))
]
@api.one
@api.constrains('n_linea')
def _check_linea(self):
if len(self.n_linea) > 2:
raise ValidationError(('El numero de línea no puede contener mas de 2 numeros'))
@api.one
@api.constrains('n_linea')
def _check_linea2(self):
if self.n_linea > 15:
raise ValidationError(('El límite de líneas'))
_columns = {
'n_linea' : fields.integer(
'Número de línea'
),
'h_salida' : fields.integer(
'Hora de salida', help='El formato de hora es Horas:Minutos. Recuérdalo.'
),
'h_entrada' : fields.integer(
'Hora de entrada', help='El formato de hora es Horas:Minutos. Recuérdalo.'
),
'd_salida' : fields.char(
string='Direccion de la salida', help='Direccion desde donde sale el auttobus para hacer su recorrido.'
),
'd_entrada' : fields.char(
string='Direccion de la entrada', help='Direccion de finalización del recorrido del autobus.'
),
'autobus_id' : fields.many2one(
'autobus',
'Autobus'
),
'paradas_id' : fields.many2many(
'parada',
'paradas_ids',
'linea_id',
'parada_id',
string='Paradas'
)
}
linea()