Search code examples
pythonpostgresqlodoo

Check if values are valid before create()


Hi I'm trying to import lines from a CSV, but I can't handle type errors. For example, if you insert a string in a datetime field, I get this error in the create:

psycopg2.errors.InFailedSqlTransaction: current transaction is aborted, commands ignored until end of transaction block

Despite handling errors with

try:
  my_module.create()
exception Except:
  #stuff
  pass

How can I check the values before I get to create or at least handle the error and take other actions. For the moment if I insert a field that is not present on a selection, I manage with try catch but I can't for data types


Solution

  • There is a method load(fields, data) on BaseModel which you could extend.

    class MyModel(models.Model):
        # if a new model
        _name = 'my.model'
        # if an extended model
        #  _inherit = 'my.model'
    
        def load(self, fields, data):
        """ Extended to do stuff to the data before importing it to database"""
            # do stuff like converting weird data input
            clean_data = self.clean_data(data)
            # call super with cleaned data afterwards
            return super(MyClass, self).load(fields, clean_data)