- Create an object containing references
- Passing reference from one model to another
- Change the order of attributes displayed in the list
- Rename the attributes displayed in the list
- Change the main attribute of the class 'id' by other
- Formatting attributes in the list
In this example shown as Province
object has a reference to the object Country
through the attribute Province.country
from storm.locals import *
from country import Country
class Province (object):
__storm_table__ = "states"
id = Int(primary = True)
name = Unicode()
country_id = Int()
country = Reference(country_id, Country.id)
Several times we need to interact with data from another model. Here is an example:
from book.manager import BookManager
from book.gui import BookGUI
from library.manager import LibraryManager
from library.gui import LibraryGUI
book_mgr = BookManager(store, reset)
library_mgr = LibraryManager(store, reset)
books_gui = BookGUI(manager = book_mgr)
# here is passed by reference 'books_gui' to 'library_gui'
library_gui = LibraryGUI(manager = library_mgr, managers = [books_gui])
In the gui.py
, only to change the order in which they are defined attributes list, changes already be reflected in the table.
class PersonsGUI( BaseGUI ):
def __init__(self, manager, managers = []):
BaseGUI.__init__(self, manager, managers)
[...]
self.addTableColumn(u'#', Person.id)
self.addTableColumn(u'Name', Person.name)
self.addTableColumn(u'Last name', Person.last_name)
self.addTableColumn(u'E-mail', Person.email)
self._start_operations()
Only renaming the keys in the call to the 'addTableColumn' function, changes will be reflected in the table.
...
self.addTableColumn(u'#', Person.id)
self.addTableColumn(u'ChangeMe', Person.name)
...
Always default id
attribute to identify objects in the database is used.
Here is an example of how to change the attribute id
by isbn
in the case of a book:
# class with 'ide' attribute
class Book (object):
id = Int(primary = True)
# class with changed 'isbn' attribute
class Book (object):
isbn = Unicode(primary = True)
Sometimes we need to format the attributes displayed in the list.
See an example of how:
- give the format 'dd/mm/yyyy' to date column
- add '$' sign to 'amount' column
def fnParseDate(self, row, value):
return value.strftime("%d/%m/%Y")
def fnParseAmount(self, row, value):
return "$ %8.2f" % value
# using the 'fnParse' option
self.addTableColumn(u'Date', InvoiceRow.date, fnParse=self.fnParseDate) # type date
self.addTableColumn(u'Supplier', InvoiceRow.supplier) # type unicode
self.addTableColumn(u'Amount', InvoiceRow.amount, fnParse=self.fnParse) # type float
How to center a column?
- 'C' for center
- 'L' for left
- 'R' for right
# using the 'alignment' option
self.addTableColumn(u'Amount', InvoiceRow.amount, alignment='C')
Go > Index | Go > Install | Go > Getting started | Go > Use cases | Go > Example Apps