As I learning exercise I have set up a little volunteer database.

You can recreate by doing the following:

1. Create a new simple application called smartgridex

2. At the bottom of db.py paste the following:

db.define_table('volunteer',
  Field('firstname', requires=[IS_NOT_EMPTY()]),
  Field('lastname', requires=[IS_NOT_EMPTY()]),
  Field('street'),
  Field('city'),
  Field('state'),
  Field('zip'),
  Field('phone'),
  format='%(firstname)s'
  )

db.define_table('availability',
  Field('avail_name', requires=[IS_NOT_EMPTY(), IS_ALPHANUMERIC()]),
  Field('volid', 'reference volunteer', requires=IS_IN_DB(db, 
'volunteer.id', '%(firstname)s')),
  Field('day', 'date', requires=[IS_NOT_EMPTY()]),
  Field('start_time', 'time'),
  Field('end_time', 'time')
  )
db.availability.volid.represent = lambda id, r: str(id) + ' | ' + 
db.volunteer[id].firstname

db.define_table('skill',
  Field('skill_description', requires=[IS_NOT_EMPTY()])
  )

db.define_table('skills_known',
  Field('volid', 'reference volunteer', requires=IS_IN_DB(db, 
'volunteer.id', '%(firstname)s')),
  Field('skillid', 'reference skill', requires=IS_IN_DB(db, 'skill.id', 
'%(skill_description)s')),
  Field('notes', 'text')
  )
db.skills_known.volid.represent = lambda id, r: str(id) + ' | ' + 
db.volunteer[id].firstname
db.skills_known.skillid.represent = lambda id, r: str(id) + ' | ' + 
db.skill[id].skill_description

db.define_table('job',
  Field('volid', 'reference volunteer', requires=IS_IN_DB(db, 
'volunteer.id', '%(firstname)s')),
  Field('job_date', 'date', requires=[IS_NOT_EMPTY()]),
  Field('start_time', 'time'),
  Field('estimated_duration', requires=[IS_NOT_EMPTY()]),
  Field('supervisor', requires=[IS_NOT_EMPTY()]),
  Field('job_description', requires=[IS_NOT_EMPTY()]),
  Field('end_time', 'time'),
  Field('worked_flag', 'boolean')
  )

3. at the bottom of default.py paste the following:

def all_volunteers():
    grid = SQLFORM.smartgrid(db.volunteer,linked_tables=['availability', 
'skills_known', 'job'])
    return locals()


def all_availabilities():
    grid = SQLFORM.grid(db.availability)
    return locals()

def all_skills():
    grid = SQLFORM.smartgrid(db.skill,linked_tables=['skills_known'])
    return locals()


def all_skills_known():
    grid = SQLFORM.grid(db.skills_known)
    return locals()

def all_jobs():
    grid = SQLFORM.grid(db.job)
    return locals()

4. Replace default/index.html with the following:

{{left_sidebar_enabled,right_sidebar_enabled=False,True}}
{{extend 'layout.html'}}

<h4/>{{=T('What Now?')}}</h4>
<ol>
  <li>{{=A('Show All Volunteers', _href="all_volunteers")}}</li>
  <li>{{=A('Show All Availabilities', _href="all_availabilities")}}</li>
  <li>{{=A('Show All Skills', _href="all_skills")}}</li>
  <li>{{=A('Show All Skills Known', _href="all_skills_known")}}</li>
  <li>{{=A('Show All Jobs', _href="all_jobs")}}</li>
</ol>


It all kind of works but it has issues and I feel certain that there must 
be a better way.

1. The query option does not show the linked to columns, only the native 
columns. See the Show All Skills Known option number 4.

2. I am having to play these sorts of games:

db.skills_known.volid.represent = lambda id, r: str(id) + ' | ' + 
db.volunteer[id].firstname

because I cannot do a query and search on the displayed info but only on 
the underlying "id"

3. Is there a better way to do the table defines for this sort of thing?

all the best,

drew

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to