Honestly I do not think there is any reason to use "lazy" virtual
fields.

If you have virtual fields, they are always part of the select. What
is the problem? you want to filter them out in tables? Than you should
use the SQLTABLE(...,fields=[...]) attribute.

Massimo

On Nov 24, 11:49 pm, Adi <[email protected]> wrote:
> Hi all,
>
> I spent hours yesterday trying to implement virtual fields correctly
> following the book, and based on that I found some behaviour which
> could be better explained.
>
> Reference:http://web2py.com/book/default/chapter/06#Virtual-Fields
> web2py version: 1.88.2
>
> 1. Selecting a virtual field like a normal field in select() part of
> the query will throw a KeyError. However, the virtual field is still
> getting selected.
>
> 2. This part:
>
> class MyVirtualFields(object):
> ...
> db.mytable.virtualfields.append(MyVirtualFields())
>
> should come before the db.select for the virtual fields to be
> selected. The model is a good place for this part of the code. This is
> in slight contrast to the second code example where
> rows.setvirtualfields(...) is called after the rows are selected. The
> difference is slightly confusing.
>
> 3. Using the lazy loading techniques makes it impossible to select the
> virtual fields directly in a query. You will need to iterate through
> the selected rows and explicitly extract the
> row.mytable.myvirtualfield() as shown in example. The need to loop
> through the rows again (against using the rows directly in say, an
> SQLTable) may not really be desirable in a web2py app situation, and
> should not be considered the general use case.
>
> Please correct me if anything here is wrong. The point is that I spent
> a lot of time and trial-error methods to figure this out, which we can
> avoid for other people if we explain this part better in the book.

Reply via email to