;-) On Wed, Oct 12, 2011 at 11:48 AM, Nate Atkinson <nja.perso...@gmail.com>wrote:
> Compute field doesn't quite work for calculating days on place > (because it changes every day), but it will make geocoding in my app > much more elegant. > > A virtual field was exactly what I needed. > > Thank you very much! I guess I skimmed that section of the book too > quickly. > > Best regards, > > Nate > > On Oct 12, 11:16 am, Richard Vézina <ml.richard.vez...@gmail.com> > wrote: > > You can use compute type field (search for compute in the book) you just > > have to put your delta in a lambda function... That if you want to store > the > > computed value... > > > > Or you can use virtual field that can compute also (not sure about that) > > your delta will be execute each time to call you select view. That is > what > > you search for since the former option will calculate the delta only when > > you enter a new record... > > > > It is maybe possible to make a cron job to update the state of you > computed > > stored delta each day for example... But if you don't need to filter base > in > > you select request base on the delta the virtual column is maybe the best > > option. > > > > Hope it help. > > > > Richard > > > > On Wed, Oct 12, 2011 at 10:49 AM, Nate Atkinson <nja.perso...@gmail.com > >wrote: > > > > > > > > > > > > > > > > > Hi, > > > > > The company I work for places environmental measuring devices at > > > different locations. I've designed a simple database to keep track of > > > where we have devices. One thing that's important to us is how long a > > > device has been on site. > > > > > It's probably easiest to understand if I just paste some code. Here's > > > a sample: > > > > > Controller: > > > > > def viewbystatus(): > > > places = db(db.plads.status == request.args(0)).select() or > > > redirect(URL('index')) > > > statusstring = db.status(request.args(0)).status > > > return dict(places=places, status=statusstring) > > > > > View: > > > > > {{extend 'layout.html'}} > > > {{def Linkify(element, id, method): return A(element, > > > _href=URL(method, args=(id)))}} > > > <h1>{{=status}}</h1> > > > <h3>{{=str(len(places)) + ' sites'}}</h3> > > > <table> > > > <thead><tr> > > > <td>Name</td><td>Address</td><td>Zipcode</td><td>City</td><td>State</ > > > td><td>Sitefinder</td><td>NumBoxes</td><td>DatePlaced</td> > > > </tr></thead> > > > {{for row in places:}} > > > {{elements = [Linkify(element, row.id, 'show') for element in > > > [row.name, row.address, row.zipcode, row.city, row.state.state, > > > row.sitefinder.wardname, row.numboxes, row.dateplaced]]}} > > > {{=TR(elements)}} > > > {{pass}} > > > </table><br> > > > <br> > > > [{{=A('Return to index', _href=URL('index'))}}] > > > > > Essentially, I would like to replace the DatePlaced column in the view > > > with something like DaysOnSite. It's a simple matter of > > > datetime.date.today() - row.dateplaced. > > > > > I could easily calculate this in the for loop in the view. Is that > > > correct practice? Should I be calculating it in the controller? Should > > > I add a column in the database and recalculate/update on each access? > > > > > For some context, there are a couple of different views where it would > > > be useful to see the number of days on site. > > > > > So, what's the correct thing to do here? >