.. _orm_genropy/orm_genropy/model/table: Definire una table ================== Costruiamo a titolo di esempio una tabella ``nominativo``. Per costruire una tabella andiamo a creare un file *nominativo.py* dove definiamo la classe *Table*:: class Table(object): def config_db(self, pkg): tbl = pkg.table('nominativo', pkey='chiave', name_long='!![it]Nominativo', name_plural='!![it]Nominativi',caption_field='nome') tbl.column('chiave', size=':8', dtype='I', name_long='!![it]Chiave') tbl.column('data_inserimento', dtype='DH', name_long='!![it]Data di inserimento') tbl.column('nome', name_long='!![it]Nome') tbl.column('cognome', name_long='!![it]Cognome') tbl.column('indirizzo',name_long='!![it]Indirizzo') tbl.column('comune_id',size='22' ,group='_',name_long='!![it]Comune').relation('glbl.comune.id',relation_name='clienti',mode='foreignkey',onDelete='raise') Per creare una *table* quindi: - definiamo una classe ``Table`` che eredita dal generico oggetto Python *object* - ridefiniamo un metodo obbligatorio ``config_db``, dove andiamo a specificare tutti gli attributi della tabella, innanzitutto il ``name`` (solitamente implicito, al primo posto), la ``pkey`` (ovvero la chiave primaria), e una serie di altri attributi facoltativi - aggiungiamo tutte le colonne che desideriamo, come :ref:`colonne reali` , :ref:`colonne virtuali` ed eventuali :ref:`relazioni` - possiamo a questo punto definire nella classe *Table* anche tutta una serie di metodi personalizzati o :ref:`Trigger` per eseguire delle operazioni sulla tabella. .. hint:: La *pkey* può essere di qualunque tipo. Se numerica, il sistema riconoscerà automaticamente la progressività proponendo di default il valore incrementato di 1 all'inserimento di un nuovo record. Alternativamente, Genropy propone di default una chiave univoca di 22 caratteri casuali, abilitata utilizzando i :ref:`sysFields` . Notiamo che la classe *Table* che abbiamo così definito è una **classe "astratta" di mixin**. Sarà poi il motore di Genropy a istanziare l'oggetto *DbTableObj* partendo dalla traccia semplificata che abbiamo fornito noi: il programmatore si limita infatti a descrivere la "punta dell'iceberg", e l'ORM si occuperà del resto. Per i dettagli sul funzionamento dell'oggetto Table rimandiamo alla :ref:`sezione dedicata` . .. raw:: html
**Parametri:** +------------------------+------+--------------------------------------------------+ | Nome parametro | Tipo | Descrizione | +========================+======+==================================================+ |name |T |Generalmente implicito, permette di indicare il | | | |nome della tabella (es: 'cliente') | +------------------------+------+--------------------------------------------------+ |pkey |T |Indica quale colonna è la primary key della | | | |tabella (es: pkey='id') | +------------------------+------+--------------------------------------------------+ |name_long |T |Indica il name_long ("friendly name") della | | | |tabella (es: name_long='Cliente') | +------------------------+------+--------------------------------------------------+ |name_plural |T |Permette di indicare il "friendly name" al plurale| | | |(es: name_plural='Clienti') | +------------------------+------+--------------------------------------------------+ |caption_field |T |Permette di indicare quale colonna deve essere | | | |indicata come etichetta del record | +------------------------+------+--------------------------------------------------+ |archivable |T |Se impostato a True i record saranno archiviabili | | | |tramite l'apposita icona della scatola | +------------------------+------+--------------------------------------------------+ |lookup |B |Se impostato a True, permette di definire la | | | |tabella come tabella di lookup | +------------------------+------+--------------------------------------------------+ |checkpref |T |Permette di attivare o disattivare l'intera | | | |tabella a seconda che nelle preferenze sia | | | |indicato o meno tramite un booleano (es: | | | |checkpref='dem.abilita_argomenti') | +------------------------+------+--------------------------------------------------+ |partition\_ |T |Permette di indicare un criterio per il | | | |partizionamento (es: | | | |partition_agente_id='agente_id'). Dopo l'_ è | | | |necessario indicare il nome della colonna | +------------------------+------+--------------------------------------------------+ |group\_ |T |**Deprecato, sostituito dai colgroups** Permette | | | |di definire un gruppo di colonne visualizzate | | | |nell'albero della vista o delle query, da | | | |associare poi nella definizione della singola | | | |colonna (es: group_fattreg='Fatturato per | | | |regione') | +------------------------+------+--------------------------------------------------+ .. sectionauthor:: Davide Paci