Bonjour,

J'ai les classe suivantes :

class Site(ModelSQL, ModelView):
    'Site'
    __name__ = 'site.site'

    plantCode = fields.Char(
            string=u'Plant Code',
            help=u'Plant Code',
            required=True
        )

    protection = fields.Many2Many(
            'site.site-site.area',
            'site',
            'area',
            string = 'Protected Area',
            help = 'Protected Area',
            readonly=True,
            on_change_with=['plantCode']
        )

    @staticmethod
    def on_change_with_protection(self):
        if self.plantCode is None:
            return ''
        else:
            cursor = Transaction().cursor        
            cursor.execute('SELECT b.id '
                               'FROM site_site a, site_area b '
                               'WHERE a."plantCode"=%s AND 
ST_DWithin(a.geom,b.geom,1000) '                           
                               'LIMIT 5' % self.plantCode)
            for area_line in cursor.fetchall():
                    cursor.execute('INSERT INTO site_area_rel (area, site) 
VALUES (%s,1);' % area_line)
            return ''

class Area(ModelSQL, ModelView):
    u'Protected area'
    __name__ = 'site.area'

    ident = fields.Char(
            string=u'ID',
            help=u'International identifiant',
            required=True
        )

    name = fields.Char(
            string=u'Area name',
            help=u'Area name',
            required=True
        )

class SiteArea(ModelSQL):
    'Site - Area'
    __name__ = 'site.site-site.area'
    _table = 'site_area_rel'

    site = fields.Many2One(
            'site.site',
            string='site',
            ondelete='CASCADE',
            required=True
        )

    area = fields.Many2One(
            'site.area',
            string='area',
            ondelete='CASCADE',
            required=True
        )

Lorsque je modifie dans la vue Site l'attribut 'plantCode', je voudrais que 
l'attribut 'protection' se mette à jour de la requête SQL du 
on_change_with_protection(self), mais cela ne fonctionne pas, je suppose 
que la syntaxe de la classe on_change est mauvaise mais je ne vois pas où ? 
Une aide ? Par avance merci. La requête SQL renvoie bien 5 valeurs exécutée 
séparément.
@+

Répondre à