Oh, OK then.
package ModelBase;
use base qw(Class::DBI);
use strict;
__PACKAGE__->set_db('Main', 'dbi:Pg:dbname=hr', '', '');
__PACKAGE__->sequence('id_seq');
1;
package Product;
## uses CGI::Untaint to validate columns
use Class::DBI::FromCGI;
use base qw(ModelBase);
use strict;
__PACKAGE__->table('product');
__PACKAGE__->columns('Primary' => qw!id!);
__PACKAGE__->columns(
'Essential' => qw!name range type code price img_path!
);
__PACKAGE__->columns('Other' => qw!wholesale_price stock_quantity!);
__PACKAGE__->has_a('type' => 'Product::Type');
__PACKAGE__->has_a('range' =>'Product::Range');
__PACKAGE__->untaint_columns(
'printable' => [qw!name code price wholesale_price
stock_quantity img_path!]
,
'integer' => [qw!range type!],
);
1;
## elsewhere
$args{product} = Product->create_from_cgi($h);
$args{errors} = $args{product}->cgi_update_errors();
unless ($args{errors}) {
$args{product}->update();
$args{product}->dbi_commit();
}
$args{product} = Product->retrieve($1);
print $args{product}->name;