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.
@+