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?

Reply via email to