Le mercredi 5 février 2014 10:27:09 UTC+1, Pascal Obstetar a écrit :
>
> 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.
> @+
>


Dans ce cas comment faire pour ajouter à l'attribut "protection" le 
résultat de la requête portant sur l'attribut "plantCode"  ?
@+

Répondre à