cecep-edu / refactory

Refactory de sistema de gestion académica SIGIAEN
GNU General Public License v3.0
2 stars 7 forks source link

Validaciones #69

Open mauriciofierrom opened 10 years ago

mauriciofierrom commented 10 years ago

La clase de validaciones para el módulo iaen_base ha sido implementada. Para usar las funciones los modelos deben heredar de la clase validation y llamar a sus métodos desde la declaración de campo _constraint e.g.

class blood_type(osv.osv, validation)
...
_constraints = [(validation.only_letters, _(u"El Tipo de dato es inválido."))]
ovnicraft commented 10 years ago

No creo que sea necesario heredar de esas clase para usarla.

mauriciofierrom commented 10 years ago

Usando un objeto de la clase da errores al enviar el self como parámetro a los métodos, ya que intenta usar el self de la clase validation en lugar de la de la clase de la que se quiere validar. La herencia funcionó. Si conoces una forma óptima de hacerlo, sería genial.

ovnicraft commented 10 years ago

veo que el validations esta en el modulo entonces se puede hacer

import .validation

en cualquier lugar

validation.methodo()

mauriciofierrom commented 10 years ago

Importando de esta forma

from validation import validation

Y con el código de la clase de esta forma

class blood_type(osv.osv):
    """ Clase para los Tipos de Sangre """ 
    _name = "blood.type"
    _description = "Registra los tipos de sangre"
    _columns = {
        'name': fields.char("Nombre", size=3, required=True),
        'code_mrl': fields.char('Código MRL', size=3)
    }
    _order = "name"
    _sql_constraints = [('name_unique', 'unique(name)', _(u'Ya existe un Tipo de Sangre con ese nombre.')),
            ('cod_unique', 'unique(code_mrl)', _(u'Ya existe un Registro con ese Código Mrl'))]
    _constraints = [(validation.no_numbers, _(u"El Tipo de Sangre no debe contener números."), ['name'])]

Me da este error openerp - google chrome_006

ovnicraft commented 10 years ago

los metodos _constraints deben ser metodos de la clase, no los puedes sacar a otra instancia.

Podrias hacer:

def no_numbers(cr, uid, ids): validation.no_numbers(argumentos_de_obj_id)

constraints = [(no_numbers,..)])

mauriciofierrom commented 10 years ago

Sí, por eso mismo realicé la herencia, para no tener entonces en cada clase repetidos los métodos llamando a los métodos de la otra clase. Al heredar, los métodos de validation son métodos de clase, así que funciona. Qué tanto ayuda a evitar la repetición de código es cosa subjetiva, y si hay una forma mejor, sería genial poder cambiarlo.