[genropy] Re: relazionare campo di altra tabella in una vista, e lista di default

  • From: Massimo Masson <max@xxxxxxxxxxxxxxx>
  • To: genropy@xxxxxxxxxxxxx
  • Date: Fri, 8 Jan 2016 11:05:00 +0100

Il 08/01/2016 10.35, Francesco Porcari ha scritto:
[...]

(tra l'altro, c'è un modo per imporre la relazione come 1:1?)

Sì devi mettere nella relazione l’attributo one_one. In questo caso potrai 
accedere ai dati in relazione dal record con un solo
passaggio. Ti faccio un esempio cliente <—> anagrafica tu puoi prendere tutti i 
dati relativi all’anagrafica come @anagrafica_id.cognome
ma contemporaneamente da anagrafica puoi fare @cliente.tipo_cliente dove 
“cliente” è il relation_name che hai messo nella relazione.
NB se tu metti l’attributo one_one=‘*’ invece di one_one=True il relation_name 
viene defaultato con il nome della tabella

OK
(peraltro mi sono accorto che nel mio caso non sono in 1:1 ma in un "classico" 1:n. Perdonatemi, sto provando "a canovaccio")

[...]

non so ditelo così, avrei bisogno di vedere il codice

MODEL
-----
ordine.py
[...]
class Table(object):
    def config_db(self,pkg):
    [...]
tbl.column('tavolo_id', name_long='!!Tavolo', name_short='!!Tavolo').relation('tavolo.id', relation_name='tavoli', mode='foreignkey', onDelete='raise')
    [...]

tavolo.py
[...]
class Table(object):
    def config_db(self,pkg):
tbl = pkg.table('tavolo',pkey='id',name_long="Tavolo",name_plural='Tavoli',caption_field='descrizione',lookup=True)
        self.sysFields(tbl)

tbl.column('descrizione',size='64',name_long='!!Descrizione',name_short='!!desc.',unique=True)
tbl.column('posti', dtype='N', name_long='!!Posti')


TableHandler
------------
th_ordine.py
[...]
class View(BaseComponent):
    def th_struct(self,struct):
        r = struct.view().rows()
        [... vari campi ...]
        r.fieldcell('@tavoli.posti')
[...]

Mi pare che i punti critici siano questi... aiuta?


tra l'altro B ha "lookup=True", se nella vista metto il campo "foreign key" che definisce 
la relazione verso B da A lui decodifica automaticamente il primo campo (nel mio caso 
"descrizione"). Comodo, ma non ho capito
- come fa
basta la relazione

OK

- perché ha scelto quel campo

ha scelto quel campo perché nella tabella hai definito l’attributo caption_field

OK

Ultima domanda: c'è un modo per fare si che all'apertura della vista venga prodotta 
la lista risultato senza premere il pulsante "Run query”?

si basta mettere nel th_query l’attributo runOnStart=True

ovvero:
class View(BaseComponent):
[...]
    def th_query(self, runOnStart=True):
        return dict([...])

Corretto?
Ho provato ma non mi funziona...

Grazie mille,
max.

Other related posts: