Re: [tryton-fr] Relation Many2Many et default_value

2014-02-05 Par sujet Cédric Krier
On 05 Feb 01:27, Pascal Obstetar wrote:
> 
> @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 ''
>
> 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ù ? 

Il n'est pas permis de modifier la DB via un on_change. La transaction
pour ce genre de requête est "readonly".

-- 
Cédric Krier - B2CK SPRL
Email/Jabber: cedric.kr...@b2ck.com
Tel: +32 472 54 46 59
Website: http://www.b2ck.com/


pgpatrczsirwo.pgp
Description: PGP signature


[tryton-fr] Relation Many2Many et default_value

2014-02-05 Par sujet Pascal Obstetar
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.
@+