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" ?
@+